2014-12-01 62 views
1

我有一個僞選擇元素的形式。僞選擇元素是一個下拉菜單。當其中一個下拉項目被點擊時,隱藏的輸入會被分配給該項目的值。我使用jQuery.validate來驗證表單。一個簡單的驗證規則綁定到隱藏的輸入。如果輸入沒有值,則隱藏輸入和僞選擇將被賦予一個錯誤類別,並顯示錯誤消息。jQuery.validate和隱藏輸入

我的問題是,更改隱藏輸入的值不會觸發更改,鍵入或模糊事件。如果將錯誤狀態應用於隱藏的輸入,則在輸入被賦予有效值後,該狀態將保留。只有當表單再次提交時,輸入才能正確驗證。

由於jQuery.validate啓用隱藏輸入驗證,我想知道是否有配置或方法來處理這個問題。

編輯:

$form.validate({ 
    ignore: false, 
    rules: { 
     'firstname': 'required', 
     'lastname': 'required', 
     'org': 'required', 
     'role': 'required', 
     'email': { 
      required: true, 
      email: true 
     } 
    }, 
    messages: { 
     'firstname': 'Please enter your first name', 
     'lastname': 'Please enter your last name', 
     'org': 'Please enter your organization', 
     'role': 'Please select your role', 
     'email': 'Please enter your email' 
    }, 
    errorPlacement: function(error, element) { 
     var $errMessage = $('.js-err-message'); 

     $errMessage.removeClass('js-hidden'); 

     $(error).each(function(){ 
      $errMessage.append(error); 

      if (element.is('#role-input')) { 
       $('.pseudo-select').addClass('mad-error'); 
      } 
     }); 

    } 
}); 
+1

你最好發佈所有相關的代碼 – 2014-12-01 15:39:48

+0

對不起,我不認爲代碼是嚴格相關的。我的問題是關於一般jQuery.validate的功能,而不是關於我的代碼的問題。 – maxhallinan 2014-12-02 15:06:12

+0

相關代碼將包含重現此問題所需的_any_代碼。在你的情況下,當他們爲他們的答案創建演示時,它可以節省時間。如果他們遇到類似的問題,它還可以幫助未來的讀者更好地理解問題/解決方案。謝謝。 – Sparky 2014-12-02 23:38:27

回答

5

使用jQuery驗證插件,這些都是標準的事件,將觸發特定元素驗證(最後一個是有點不同)...

  • 打字在一個盒子
  • 從列表
  • 選擇點擊複選框或單選按鈕
  • 失去輸入元素
  • 的焦點點擊提交按鈕(整個表單驗證

由於沒有這些東西的時候觸發一個隱藏的元素值發生變化,則需要觸發它通過使用the .valid() method來驗證元素。

你已經向我們展示了任何代碼,更不用說改變隱藏元素值的代碼了,所以我只能給你一些通用的東西。你可以將你使用任何功能更改值內.valid()代碼...

  • 變化隱藏元素
  • 呼叫.valid()的值來驗證隱藏元素

    $(document).ready(function() { 
    
        $('#myform').validate({ // initialize plugin 
         // your options 
        }); 
    
        $('#some_button').on('click', function() { 
         // some imaginary button that changes the hidden value 
         $('input[name="myHiddenElement"]').val('newvalue'); // <- change the hidden value 
         $('input[name="myHiddenElement"]').valid(); // <- triggers validation on the hidden element 
        }); 
    
    }); 
    

您可能需要使用其他插件選項(如the errorPlacement option)才能在佈局中正確放置錯誤消息label,否則它將浮動在隱藏元素之後放置。

+0

感謝您使用valid()方法的建議。這將完美運作。關於你的實現,更改事件不會觸發隱藏的元素,當用JavaScript更改值時:http://stackoverflow.com/questions/12580761/hidden-input-change-event – maxhallinan 2014-12-02 15:28:16

+0

@maxhallinan,謝謝,我會編輯我的答案並研究一下。 – Sparky 2014-12-02 15:32:49