2015-05-05 49 views
2

我正在使用jQuery驗證插件。我有一個動態的表單,根據用戶爲循環選擇的數字取決於1-5而創建。我正在努力編寫動態部分,以使每個表單字段在每個循環上正確工作。帶有jQuery驗證插件的ColdFusion動態循環創建動態規則

<!--- Looping Validation ---> 
<script> 
    $("#form").validate({ 
     focusCleanup: true, 
     focusInvalid: false, 
    rules: { 
phoneNumber_<cfoutput>#Add#</cfoutput>: { 
      required: true, 
      validatePhone: true 
     }, 
}, 
     // Same for other fields 
    messages: { 
phoneNumber_<cfoutput>#Add#</cfoutput>: "This field is required.", 
     // Repeat for other fields 
    } 
}); 

因此,我嘗試創建第一個示例,規則的工作原理,但只有當它循環一次。如果用戶選擇兩個或更高的循環,它只能在第一個而不是第二個或更高的循環上工作。

// Validates Phone Number 
jQuery.validator.addMethod("validatePhone", function(value, element) { 
    return this.optional(element) || /^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$/.test(value); 
}, 'Please enter valid Phone Number.'); 

然後我試了一下,它打破了RegEx,並且只試圖在第一個循環上進行驗證。

// Validates Phone Number 
jQuery.validator.addMethod("validatePhone", function(phoneNumber_<cfoutput>#Add#</cfoutput>) { 
    var value = new RegExp("^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$"); 
    return phoneNumber_<cfoutput>#Add#</cfoutput>.match(value); 
}, 'Please enter valid Phone Number.'); 

任何幫助,這將不勝感激!先謝謝你!

+0

輸入2,和步throught使用您選擇的JavaScript去開溜的代碼。 –

+0

您可能已經意識到這一點,但如果您不知道:您的電話號碼正則表達式會拒絕一些有效的電話號碼格式。 ** [研究這個小提琴](http://jsfiddle.net/83yvrwto/1/)**看看我的意思。 – radiovisual

回答

4

我正在使用jQuery驗證插件。我有一個動態的表單,根據用戶爲循環選擇的數字取決於1-5而創建。我正在努力編寫動態部分,以使每個表單字段在每個循環上正確工作。

你究竟在說什麼「循環」?我看不到你的代碼循環。您不能在同一表單上多次調用.validate()方法。您只需撥打.validate()方法一次性在您的窗體上初始化該插件。 所有後續調用都將被忽略。表單數據的實際驗證根據插件捕獲的自動的事件自動發生。循環是不需要的,在這裏完全沒用。

如果您需要聲明的規則到動態創建的域元素,你會打電話the .rules() method在創建新的領域後,立即和隨時隨地後.validate()

目標的所有字段「開始」 phoneNumber_ ...

$('input[name^="phoneNumber_"]').each(function() { 
    $(this).rules('add', { 
     required: true, 
     validatePhone: true, 
     messages: { // optional 
      required: "custom message for required", 
      validatePhone: "custom message for validatePhone" 
     } 
    }); 
}); 
+0

這會工作嗎?尋找部分字段名稱?我認爲將類名應用於每個電話號碼字段並將其用作選擇器會更有意義。 –

+1

@ AdrianJ.Moreno是的,部分匹配將起作用。你會注意到第一行的'^',這不是一個錯字(沒有人說過)。它將匹配定位到開頭,以便說出名爲'publish_phoneNumber_ok'的複選框不匹配。類匹配是一樣有效的(並且通常更容易),但是這工作正常。 –

+0

很酷。沒有注意到^一目瞭然。謝謝。 –