我有一个带有自己的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>的外表和感觉。
发布于 2010-11-22 03:45:58
要防止回发,请确保您的JS函数返回false。我在上面的代码中看到了您对false的测试,但没有返回false。
<button type=submit onclick='if($(this).closest('form').submit()==false) return false;' onserverclick='btnSave_click' runat =server>Save</button>发布于 2010-11-23 09:00:13
多梅尼卡,但重点不在于此。在我的onclick代码中,如何获得表单提交处理程序的返回值(真或假)?var sts=myFunc(){return true/false;}将sts设置为true/false。但var sts = $(this).closest('form').submit()将sts设置为object,而不是true/false。因此,我不知道表单的提交处理程序是否会在单击按钮时返回true/false。我一定是在错误的轨道上,因为这似乎是按钮和单击按钮的基本用法。
我找到了解决办法。而不是做-
<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中调用表单的提交处理程序。函数将true/false作为正常函数返回。如果为false,则我的onclick返回,否则将继续从__doPostback()函数到asp.net。
解决方法还有一个额外的优势--如果表单有效,我之前的尝试将提交该表单两次,一次是我自己对.submit()的调用,然后是通过__dopostback从asp.net提交。回想起来,我太天真了。学到的教训。
https://stackoverflow.com/questions/4241996
复制相似问题