2011-05-06 1 views
0
var cards = new Array(); 

cards [0] = {name: "VISA", length: "13,16", prefixes: "4", checkdigit: true}; 
cards [1] = {name: "VISA_DELTA/ELECTRON", length: "16", prefixes: "417500,4844,4508,4026,4917,4913", checkdigit: true}; 
cards [2] = {name: "MC", length: "16", prefixes: "51,52,53,54,55", checkdigit: true}; 

puis mes fonctions:Déterminer la carte par rapport aux préfixes carte

function CardTypes() 
{ 
for (var i=0; i<cards.length; i++) { 
if cards.name.Validate(PaymentForm.CardNumber.value)<!--pretty sure this is wrong--> 
cardname = cards[i].getCardType(); 
} 
if (cardname.length > 0) { 
alert("This looks like a " + cardname + " ."); 
}; 
}; 

Lorsque le formulaire est soumis, il appelle la fonction Valider qui appelle à son tour toutes les autres fonctions, y compris CardTypes(). Je voudrais pouvoir déterminer le type de carte par les préfixes de la carte, c'est-à-dire 4 = visa. Je suis assez sûr que j'ai complètement foiré la fonction CardTypes(). Toute aide serait appréciée. L'identifiant de mon formulaire est PaymentForm.

+0

Avant de continuer à coder une solution, je dois être sûr de 2 choses: 1) PaymentForm.CardNumber.value donnera la valeur donnée par l'utilisateur et 2) Vous voulez que CardTypes retourne le nom de la carte type. Corrigez-moi si j'ai tort, s'il-vous plait. Je ne peux pas faire beaucoup plus sans le HTML ou ces 2 détails. – Mamsaac

+0

@Mamsaac: Merci pour votre réponse rapide. Oui Les CardTypes doivent renvoyer le nom du type de carte, c'est-à-dire le visa, etc. PaymentForm est mon formulaire et CardNumber est l'identifiant du champ de saisie du numéro de carte qu'il doit vérifier. ill ajouter le html au message original – Hatzi

Répondre

0
function CardTypes() 
{ 
    var givenValue = PaymentForm.CardNumber.value; 
    for (var i = 0; i < cards.length; i++) { 
     var cardPrefixes = cards[i].prefixes.split(','); 
     var leave = false; 
     for (var j = 0; j < cardPrefixes.length; j++) { 
      if (givenValue.indexOf(cardPrefixes[j]) === 0) { 
       return cards[i].name; 
      } 
     } 
    } 
} 

Cela devrait fonctionner.

+0

Juste vu Planetjones réponse. Cela devrait aussi fonctionner. Bien que je ne recommanderais pas de modifier le prototype de String pour quelque chose comme ça. – Mamsaac

+0

Merci beaucoup pour votre aide ... je vous laisse savoir comment je me porte. – Hatzi

0

Quelle est la valeur de PaymentForm.CardNumber.value? Est-ce le numéro entier de la carte?

var cardNumber = PaymentForm.CardNumber.value; 

Si cela vous convient, vous voudrez alors lire tous les préfixes, par ex.

for (var i=0; i<cards.length; i++) { 

     var prefixes= cards[i].prefixes; 
     var prefixArray = prefixes.split(","); 

     for(var j=0; j < prefixArray.length; j++) { 

      if(cardNumber.startsWith(prefixArray[j])) { 
       alert("Card Type is " + cards[i].name); 
      } 

      } 
    } 

// Ajouter cette méthode à chaîne

String.prototype.startsWith = function(str){ 
    return (this.indexOf(str) === 0); 
} 

jsFiddle: http://jsfiddle.net/KDTPX/

+0

Merci pour votre aide ... mal vous faire savoir comment je reçois – Hatzi