过滤器本身非常简单:

$.expr[':'].valid = function(a) {
    var phone = a.value.replace(/\D/g,''),
        phonesub = phone.substr(0, 2);
    return (phonesub == '79' || phonesub == '89') && phone.length == 11
}


我只想检查phone是否将我们的长度定为11,并且它以7989开头。然而:

$(":valid")
[<input type=​"text" id=​"phone1" name=​"phone1" value>​]


显然,值是“”。

为什么我的过滤器不起作用?

顺便说一句,同时,DOM上还有另一个输入:

<input type="text" id="phone2" name="phone2" value="" disabled="">


并且没有被过滤器匹配。它受disabled影响吗?

让我们改变它的价值:

$("#phone2")
[<input type=​"text" id=​"phone2" name=​"phone2" value disabled>​]
$("#phone2").val("79111111111")
[<input type=​"text" id=​"phone2" name=​"phone2" value disabled>​]
$("#phone2").val()
"79111111111"
$(":valid")
[<input type=​"text" id=​"phone1" name=​"phone1" value>​]


我很绝望

最佳答案

因为在jQuery中“有效”其保留的过滤器名称。使用“ validPhone”或其他名称代替“ valid”。

10-06 07:32