2014-01-14 21 views
2

我想在地址街道字段上使用jQuery验证插件(http://jqueryvalidation.org/),人们必须确认他们的地址是否不包含门牌号码(有些只是忘记了写它或者其他)。jQuery验证与自定义错误消息,其中包括确认

Form

所以我写了一个自定义规则,并有两个按钮像这样的扩展错误消息:

​​

那么实际的验证码

$(document).ready(function() { 
    var xx = $('#customer-data-form').validate({ 
     debug:true,  

     ignore: ":hidden", 
     rules: { 
      Anschrift: { 
       containsnum:true 
      } 
     } 
    }); 
    /* check for house number */ 
    $(document).on('click',"#no",function(e){ 
     console.log('no') 
     e.preventDefault(); 
     $('#Anschrift').rules("remove", "containsnum"); 
     xx.element('#Anschrift'); 
    }); 
    $(document).on('click',"#yes",function(e){ 
     console.log('yes') 
     e.preventDefault(); 
     $('#Anschrift').focus(); 
    }); 
}); 

它工作得很好但在某些情况下,确认(以及删除规则)仅适用于第二次点击是/否按钮。

我已经安装了一个提琴重现此行为的步骤。

http://jsfiddle.net/CC3zH/2/

的目标是,要在第一次点击该邮件工作的确认在所有情况下,然后我希望有一个暗示,如何将按钮从错误信息字符串分开。 我已经尝试过使用errorPlacement等,但没有找到一个简单的解决方案,而没有重写所有的函数来显示错误。

感谢您的任何提示。

回答

2

这与focusoutclick事件如何相互作用有关。如果你环顾四周,你会发现当一个focusout事件也在失去焦点的元素上触发时,click事件没有被正确触发是一个非常常见的问题。许多解决方案提出,而是一个在你的案件的工作原理是改变你的$.on处理程序键上mousedown而不是click,就像这样:

$('#customer-data-form').on('mousedown',"#no",function(e){ 
    console.log('no') 
    e.preventDefault(); 
    $('#Anschrift').rules("remove", "containsnum"); 
    xx.element('#Anschrift'); 
}); 
$('#customer-data-form').on('mousedown',"#yes",function(e){ 
    console.log('yes') 
    e.preventDefault(); 
    $('#Anschrift').focus(); 
}); 

在这里工作: http://jsfiddle.net/ryleyb/CC3zH/3/

+0

我已经更新了小提琴这个http://jsfiddle.net/ryleyb/CC3zH/4/添加'xx.element('#Anschrift');'到“是”按钮,否则它会验证所有字段。 – marcus