2013-02-01 74 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