2011-04-08 96 views
4

我哈瓦像这样jQuery验证:获取远程验证,而不改变

remote: { 
    type: "POST", 
    url: "/some/url", 
    data: { 
    value: function() { 
     return $("#field").val(); 
    }, 
    bypass: function() { 
     if ($("input:radio[name=toggleBypass]:checked").val() == "yes"){ 
     return "yes"; 
     } 
     return "no"; 
    } 
    } 
} 

远程验证设置如果旁路是“是”,阿贾克斯总是返回true关注字段的值重新运行。

它适用于模糊和提交,但如果我重置单选按钮值然后提交,它不会重新验证。

例如,

  1. 集toggleBypass到 “是”
  2. 集字段为无效值
  3. 运行$( “表”)。验证()。元素( “#场”) 。由于旁路是“是”,它通过。
  4. 将toggleBypass设置为“否”
  5. 运行$(“form”).validate()。element(“#field”)。它通过,因为远程没有重新提交。

任何想法如何让它正常工作?

回答

2

如果你看看jquery.validate.js线897,你会看到一个优化:

if (previous.old !== value) {

此行阻止新的验证,如果该字段的值并没有改变。由于您使用的是validate().element(),因此它只会检查该字段,而不是整个表单,因此它不会检测到toggleBypass中的更改。

要么从jquery.validate源中删除此检查,要么检查整个表单,而不仅仅是该字段。

+0

感谢您的帮助。我明天回去工作时会试试这个。 – Altealice 2011-04-10 16:36:50