2014-01-10 39 views
0

我正在使用jQuery驗證插件並嘗試使用帶有通配符選擇器的errorPlacement回調函數。我嘗試了無數種通配符語法,並且沒有使用.attr方法(並嘗試了其他幾種方法),並且無法使其正常工作。jQuery驗證插件errorPlacement與通配符選擇器

我已經閱讀了幾十個關於通配符的線程,以及api文檔,但沒有解決它們在像這樣的需要使用'元素'的函數中的使用。似乎無法讓我的頭周圍...

/*** This will work but only for the specified string ****/ 
if (element.attr("name") == "cdlradio1") 

我想選擇與

var $validator = $("#myform").validate({ 
    errorPlacement: function(error, element) { 
if (element.attr("[name^='cdlradio']")) 
    error.insertAfter(element.closest(".bootradlab")); 
else 
    error.insertAfter(element); 
} 

任何幫助,將不勝感激「cdlradio」開頭的所有輸入元素。

回答

0

這不是正確的格式...

if (element.attr("[name^='cdlradio']")) ... 

因爲,the .attr() method is looking for an attribute as its only argument。顯然,[name^='cdlradio']選擇器,而不是屬性。您不需要選擇器,因爲您的目標元素是已由element參數選擇

你必須得到現場name和檢查,看看它是否包含你的字符串...

if (element.attr('name').indexOf('cdlradio') >= 0) ... 

「通配符」 DEMO:http://jsfiddle.net/aBrL2/2/

BTW - ^= is the "starts with" selector一張通配符。然而,我上面的解決方案是一個真正的通配符,因爲只要字符串出現在某個位置,它就不會關心位置。通過將>=運營商更改爲==運營商,我的答案可以輕鬆轉換爲「開始」。

「打頭的」 DEMO:http://jsfiddle.net/aBrL2/3/

+1

我知道有一些錯誤使用.attr()方法,因爲我已經在引用我的想法是一個通配符聲明元素名稱。使用indexOf絕對是更好的選擇。感謝您的澄清和修復。完美的作品! –