2014-01-14 19 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