2

过滤器本身非常简单:

$.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 并且它以79or开头89。然而:

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

很明显 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>​]

我很绝望

4

2 回答 2

2

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

于 2012-05-25T08:53:33.547 回答
0

因为a是一个 dom 元素,你应该写

a.value.replace(/\D/g,''),

或者

$(a).val().replace(/\D/g,''),
于 2012-05-25T08:21:46.410 回答