2010-07-07 4 views
1

J'ai reçu une aide précieuse l'autre jour et j'espère encore une fois que je peux obtenir la réponse dont j'ai besoin car je suis plutôt bloqué en ce moment. J'ai un formulaire qui a une entrée de texte (#USA_sub) et deux entrées de texte suivantes (#FirstName) et (#LastName) J'ai une règle de validation qui vérifie pour voir si chaque valeur de (#FirstName) et (#LastName) chaque apparaît dans (#USA_sub). Ce que j'ai fonctionne sauf pour ceci: quand vous entrez la valeur correcte dans l'entrée (#FirstName), corrigez qu'elle est contenue dans (#USA_sub) il vous suffit d'entrer 2 lettres dans le nom pour qu'elle soit validée. Si vous ignorez le prénom, il faut tout le nom de famille comme il se doit.Aide avec indexOf pour la règle de jquery personnalisée

$.validator.addMethod(
    "firstSig", 
    function(value, element, params) { 
     return $(params).val().indexOf(value + ' ' + $("#LastName").val()) > -1; 
    }, 
    "Your first name must be contained in your Electronic Signature." 
); 

$.validator.addMethod(
    "lastSig", 
    function(value, element, params) { 
     return $(params).val().indexOf($("#FirstName").val() + ' ' + value) > -1; 
}, 
    "Your last name must be contained in your Electronic Signature." 
); 

et les règles de validation:

        FirstName: { 
        required: true, 
        minlength: 2, 
        firstSig: "#USA_sub" 
       }, 
       LastName: { 
        required: true, 
        minlength: 2, 
        lastSig: "#USA_sub" 
       } 

Merci!

Répondre

0

La raison en est que vous testez une partie du nom par rapport au nom complet. Tant que la chaîne cible contient des caractères consécutifs correspondant à la chaîne de test, il y aura une correspondance.

Par exemple:

FirstName = Bob 
LastName = Dylan 

USA_sub = Bob Dylan 

user has typed: Bob Dyl 

Il y a un match parce que le indexOf() trouvé Bob Dyl dans les Bob Dylan

juste essayer de faire une recherche ==, comme dans:

return $(params).val() == ($("#FirstName").val() + ' ' + value); 

La raison pour laquelle votre FirstName validateur fonctionne, c'est que vous concaténer dans l'espace à t il finit.

Donc Bo(space) n'est pas trouvé dans Bob(space)Dylan. Mais Bob(space) se trouve dans Bob(space)Dylan


EDIT: nouvelle version qui utilise une expression régulière pour tester début/fin de l'entrée, et élimine la référence croisée de prenom à LastName et vice versa.

La version précédente ne fonctionnait pas car vous validiez toujours les champs FirstName et LastName par rapport au champ FirstName.

En raison de cela, lorsque vous onglet sur le champ LastName, qui est sans doute vide, la validation échoue pour FirstName, et il n'a pas revalider jusqu'à ce que vous allez revenir à la FirstName. Ce que j'ai fait ci-dessous consistait à supprimer le référencement entre champs et à utiliser une expression régulière afin que nous puissions tester le début/la fin de la ligne.Donc, en gros ce que nous avons est:

tests FirstName pour - BeginningOfInput + FirstName + espace tests LastName pour - l'espace + LastName + EndOfInput

$.validator.addMethod(
    "firstSig", 
    function(value, element, params) { 
      // The regular expression represents 
      // beginning of input + value + space 
     var regex = new RegExp('^' + value + ' '); 
     return regex.test($(params).val()); 
    }, 
    "Your first name must be contained in your Electronic Signature." 
); 

$.validator.addMethod(
    "lastSig", 
    function(value, element, params) { 
      // The regular expression represents 
      // space + value + end of input 
     var regex = new RegExp(' ' + value + '$'); 
     return regex.test($(params).val()); 
}, 
    "Your last name must be contained in your Electronic Signature." 
); 

De cette façon, vous ne recevez pas une validation échec lorsque vous avez entré un FirstName correct, mais n'avez pas encore atteint le champ LastName.

+0

return $ (params) .val() === (valeur + '' + $ ("# Nom"). Val()); et return $ (params) .val() === ($ ("# FirstName"). Val() + '' + valeur); semblent fonctionner mieux. J'apprécie vraiment l'explication, maintenant je la comprends plutôt que de simplement le faire! Merci Patrick! –

+0

@Dirty - De rien. : 0) – user113716

+0

@patrick, vous avez été d'une aide énorme, pourriez-vous jeter un oeil à un comportement inattendu avec ci-dessus? Lorsque vous entrez votre prénom, vous obtenez l'erreur jusqu'à ce que vous entrez votre nom de famille et revenir au prénom, supprimez-le et entrez-le de nouveau ... –

Questions connexes