2012-05-25 3 views
2

Le filtre lui-même est assez facile:jquery filtre personnalisé ne fonctionne pas

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

Je veux juste vérifier si la longueur phone nous 11 et commence par 79 ou 89. Cependant:

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

Il est clair que la valeur est "".

Pourquoi mon filtre ne fonctionne pas?

BTW, en même temps, il y a une autre entrée sur le DOM:

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

et il ne se correspond par le filtre. Est-il affecté par disabled?

Changeons sa valeur:

$("#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>​] 

Je suis désespéré

Répondre

2

Parce que " valide " son nom de filtre réservé dans jQuery. Utilisez "validPhone" ou un autre nom au lieu de "valide".

+0

Muchos gracies, Arturka :) C'est la réponse. – Nemoden

0

Depuis a est un élément de dom vous devez écrire

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

ou

$(a).val().replace(/\D/g,''), 
+0

Oui, 'value()' est une faute de frappe dans mon code (mise à jour de la question). Pourtant, ne fonctionne pas correctement. – Nemoden

Questions connexes