Това не е специфично за jQuery, а просто извикване на основна функция на Javascript.
$('#cardNumber').on('keyup',function(){
validateAmericanExpress(this.value);
});
function validateAmericanExpress(cardNumber){
if(cardNumber === // whatever, now the if logic will work
}
По принцип вие извиквате функцията със стойността на всеки клавиш и предавате стойността във функцията като cardNumber
, за да се използва в тази функция.
Това е по-добре от използването на променлива с голям обхват, защото не изисква разпределяне на кеша от браузъра, повишавайки ефективността и скоростта. По-важното е, че помага да се избегнат възможни сблъсъци (множество елементи, задаващи глобалната променлива в конфликт) и прави кода много по-четлив и по-лесен за поддръжка.
Ефективно използване на възможни връщания
Можете дори да направите кода по-подходящо разположен като такъв:
$('#cardNumber').on('keyup',function(){
if(validateAmericanExpress(this.value)){ // this checks if the call returned true
// happy times
} else {
// show error message that says invalid
}
});
function validateAmericanExpress(cardNumber){
if(cardNumber === 'whatever'){
return true;
} else {
return false;
}
}
Или дори по-добре, използвайте троичен!
$('#cardNumber').on('keyup',function(){
validateAmericanExpress(this.value) ? alert('correct') : alert('error');
});
function validateAmericanExpress(cardNumber){
cardNumber === 'whatever' ? return true : return false;
}
Състояние на супер ефективност! Ако искате да научите повече за троичните / условните оператори, вижте това справка.
Направете функцията по-разширяема
И накрая, вашият валидатор на номер на карта вероятно просто проверява дали това е конкретна числова последователност, нали? Вероятно можете да го направите без извикване на функция:
$('#cardNumber').on('keyup',function(){
var regex = '/^3[47][0-9]{13}$/';
regex.test(this.value) ? alert('correct') : alert('error');
});
Това е за тестване за AmEx. Ако тествате различни кредитни карти, можете да използвате функцията с параметър и да я направите луд общ!
$('#cardNumber').on('keyup',function(){
validateCreditCard(this.value),'amex') ? alert('correct') : alert('error');
});
function validateCreditCard(cardNumber,type){
var regex;
switch(type){
case 'amex':
regex = '/^3[47][0-9]{13}$/';
break;
case 'visa':
regex = '/^4[0-9]{12}(?:[0-9]{3})?$/';
break;
case 'mastercard':
regex = '/^5[1-5][0-9]{14}$/';
break;
default:
regex = '/d{16,17}$/'; // just checking it is all numeric and appropriate length
}
return regex.test(cardNumber);
}
Това ще ви позволи да тествате всички кредитни карти едностранно, особено ако вместо да подадете низ като 'amex'
използвате стойността на избор на радио бутон. Ако искате повече информация относно регулярните низове за всички карти, разгледайте тази справка.
person
PlantTheIdea
schedule
07.05.2013
validateAmericanExpress()
функция - person romo   schedule 07.05.2013