这不是 jQuery 特定的,它只是基本的 Javascript 函数调用。
$('#cardNumber').on('keyup',function(){
validateAmericanExpress(this.value);
});
function validateAmericanExpress(cardNumber){
if(cardNumber === // whatever, now the if logic will work
}
基本上,您使用每个 keyup 上的值调用函数,并将值传递给函数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'
您使用单选按钮选择的值那样传递字符串时。如果您想了解有关所有卡片的正则表达式字符串的更多信息,请查看此参考。