我有一个带有自己的JQuery验证的表单。
单击JQuery <button id=btnRegister type=submit>
时,将调用我的验证代码,如果无效,则表单不会提交。一切都很棒。
我在此表单上有另一个<button id=btnSave>
。
我希望btnSave仅在表单数据有效时才能触发asp.net服务器端事件(onserverclick)。
我试过以下 -
<button type=submit onclick='if($(this).closest('form').submit()==false) return;' onserverclick='btnSave_click' runat =server>Save</button>
当我点击btnSave时,它会调用我的表单的提交事件处理程序,如果无效,则会正确返回false。到现在为止还挺好。在此之后,我希望onserverclick事件不触发器。但是,即使表单无效,onserverclick也会触发并页面回发。
正如我所看到的,不能同时使用onclick和onserverclick。
我该怎么做才能让它们和谐共存?
如果我将<button>
更改为<input type=submit>
,那一切都会成功。但我喜欢<button>
的外观和感觉。
答案 0 :(得分:1)
要防止回发,请确保您的JS函数返回false。我在上面的代码中看到你的测试是假的,但是没有返回false。
<button type=submit onclick='if($(this).closest('form').submit()==false) return false;' onserverclick='btnSave_click' runat =server>Save</button>
答案 1 :(得分:0)
Domenic,thx,但重点超出了这一点。在我的onclick代码中,如何获取表单的提交处理程序的返回值(true或false)? var sts=myFunc(){return true/false;}
会将sts设置为true / false。但是var sts = $(this).closest('form').submit()
将sts设置为[object]而不是true / false。因此,我不知道表单的提交处理程序是否会在按钮的onclick中返回true / false。我必须走错路,因为这似乎是按钮和onclick的基本用法。
我找到了解决方法。而不是做 -
<button onclick='if($(this).closest('form').submit()==false) return false;'>
我现在做 -
<button onclick='if($.fn.validate()==false) return false;'
$(this).closest('form').submit()
提交表单,并根据用户的输入提交返回true或false。但是我仍然无法访问onclick代码中的返回值。所以问题仍然存在。为了解决它,我现在调用我的validate()函数,而不是在onclick中调用form的提交处理程序。我的validate()函数返回true / false作为普通函数。如果为false,则我的onclick返回,否则继续从asp.net返回__doPostback()函数。
解决方法还有一个额外的好处 - 如果表单有效,我之前的尝试将提交表单两次,一次是我自己调用.submit()然后通过asp.net的__dopostback。所以回想起来,我太天真了。经验教训。