2013-02-01 70 views
0

我想下面的類來訪問所有輸入:jQuery和數組類型類

validate['number'] 

當然有時他們中的一些是:

validate['required', 'number'] 

所以,我需要所有具有number那裏。這是製造這些類的Chronoform系統的一部分。

我已經試過這個,想通了,如果它的工作,我會去那裏,使它適用於所有,即使有requiredalpha

jQuery(document).ready(function() { 
    jQuery(".validate['number']").change(function() { 
    if(this.value <= '') { 
     this.value = '0'; 
    } 
    }); 
}); 

但是不行,它不會找到它們。那麼,我如何找到這樣的課程及其子課件?我甚至都不知道該怎麼稱呼這些類,因爲我從來沒有見過他們。

回答

2

帶有特殊字符的類名不能直接使用.classname訪問。

相反,你需要使用這個選擇:[class~="validate['number']"]

+0

太棒了!它爲我工作'jQuery('input [class〜=「validate [\'number \']」]')' – jfreak53

0

確保正確轉義特殊字符。試試這個:

$(".validate\\[\\'required\\'\\]") 

從jQuery API文檔:

使用任何元字符(如 「#$%&「()* +,中/ :;! < =>?@ [] ^`{|}〜)作爲名稱的文字部分,必須用兩個反斜槓來轉義: ,例如,帶有 id =「foo.bar」的元素,可以使用選擇器$(「#foo \ .bar」)。

更多選擇逃避:http://api.jquery.com/category/selectors/

我甚至會建議你延長僞選擇這樣的jQuery的支持:

(function() { 
    var rRequired = /\bvalidate\[[^\]]*\brequired\b[^\]]*\]/, 
     rAlpha = /\bvalidate\[[^\]]*\balpha\b[^\]]*\]/, 
     rNumber = /\bvalidate\[[^\]]*\bnumber\b[^\]]*\]/; 

    $.extend($.expr[':'], { 
     mandatory: function(elem) { 
      return rRequired.test(elem.className) 
     }, 

     number: function (elem) { 
      return rNumber.test(elem.className) 
     }, 

     alpha: function (elem) { 
      return rAlpha.test(elem.className) 
     } 
    }); 
})(); 

然後你就可以在你的代碼中使用更簡單的選擇:

$('input:mandatory') 
$('input:number') 
$('input:alpha') 

注:我試圖製作「:required」僞選擇器,但由於某種原因它不起作用,因此改爲:mandatory