代码改变世界

Jquery Validation无法在Chrome浏览器下进行form.submit()表单提交的解决方法

2010-04-09 10:04  Fred-Xu  阅读(3501)  评论(2编辑  收藏  举报

  Jquery Validation验证插件中的form.submit()方法有时会在Chrome谷歌浏览器中提交Form无效,解决方法是将form.submit()改为__doPostBack('Button3','');

$("#<%=Button3.ClientID %>").click(function() {
                //init validate
                $("#form1").validate({
                    submitHandler: function(form) {
                        $(form).find("#<%=Button3.ClientID %>").attr("disabled", true).attr("value", $("#<%=Button3.ClientID %>").val() + "...");
                        //form.submit();
                        //将原有的form.submit()改为下面代码
                        __doPostBack('Button3', '');
                    },
                    rules: {
                        Text1: {
                            required: true
                        }
                    }
                }
            });

备注:  

  上面的Button3按钮是asp.net Button控件,点击会进行提交表单执行服务器端事件。

<asp:Button ID="Button3" runat="server" Text="Button" OnClick="Button3_Click" />

而asp.net(带有服务器端form)的页面会在客户端自动生成以下代码

<script type="text/javascript">...
<!--
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
// -->
</script>

  其中eventTarget 和eventArgument,是两个就是用来存储在回送的时候获取是哪个控件触发了回送,并且带了什么参数。总之,调用__doPostBack函数可以实现客户端控件调用服务器端控件的响应。或者是在javascript里面调用.net的服务器控件事件。

  所以form.submit()无效的时候,我们可以改为__doPostBack('Button3','')来进行Form表单的提交,同样可以达到我们想要的效果。