Jquery 仅在输入第一个字符时运行(“keyup”)

Jquery 仅在输入第一个字符时运行(“keyup”),jquery,query-optimization,keyup,Jquery,Query Optimization,Keyup,不是绑定函数方面的专家。我创建了下面的代码片段来演示我要做的事情 我想在每次输入输入字段的第一个字符时触发一个事件,但只触发第一个字符。我希望它运行,即使用户清除输入并重新开始 $(“#userCardNumber”)如果我使用.one(“keyup”,function(),那么它只运行一次,如果用户清除字段,点击backspace,或者键入第一个字符,它就不会再次运行(据我所知,它已解除绑定/解除绑定) $(“#userCardNumber2”)我可以通过使用.on(“keyup”,funct

不是绑定函数方面的专家。我创建了下面的代码片段来演示我要做的事情

我想在每次输入输入字段的第一个字符时触发一个事件,但只触发第一个字符。我希望它运行,即使用户清除输入并重新开始

$(“#userCardNumber”)
如果我使用
.one(“keyup”,function()
,那么它只运行一次,如果用户清除字段,点击backspace,或者键入第一个字符,它就不会再次运行(据我所知,它已解除绑定/解除绑定)

$(“#userCardNumber2”)
我可以通过使用
.on(“keyup”,function()
在该函数中添加一个
if(element.length==1){}
来达到我的目的,但这似乎效率非常低,因为它在每个keyup上运行,而且由于这是一个卡号字段,需要额外运行14-15次

试图学习最有效的做事方法,我很好奇如何在不烧掉额外的键盘运算的情况下达到预期的结果,就像我在
$(“#userCardNumber2”)
中做的那样

(函数($){
//关于就绪函数
$(函数(){
$(“#用户卡号”).1(“键控”,函数(){
var el=$(本);
cardType=el.val();
如果(卡片类型=3){
console.log(“美国运通”);
}否则如果(卡片类型=4){
控制台日志(“Visa”);
}否则如果(卡片类型=5){
控制台日志(“万事达卡”);
}否则如果(cardType=6){
console.log(“Discover”);
}否则{
console.log(“其他东西”);
}
log(“运行函数”)
});
$(“#userCardNumber2”)。在(“keyup”,function()上{
var el=$(本);
cardType=el.val();
如果(cardType.length==1){
如果(卡片类型=3){
console.log(“美国运通”);
}否则如果(卡片类型=4){
控制台日志(“Visa”);
}否则如果(卡片类型=5){
控制台日志(“万事达卡”);
}否则如果(cardType=6){
console.log(“Discover”);
}否则{
console.log(“其他东西”);
}
}
log(“运行函数”)
});
});
}(jQuery));
div{
边缘顶部:20px;
}

使用正则表达式并仅在“模糊”(当用户的焦点远离输入时)上进行验证可能会更有效。请尝试以下操作:

(函数($){
//关于就绪函数
$(函数(){
$(“#userCardNumber,#userCardNumber2”)。在(“模糊”,函数()上){
var number=$(this.val();
var ccType=getCardType(编号);
console.log(ccType);
//实现您想要使用ccType的任何其他代码
});
函数getCardType(编号){
//维萨电子
re=新的RegExp(“^(4026 | 417500 | 4508 | 4844 | 491(3 | 7))”;
if(number.match(re)!=null)
返回“Visa Electron”;
//签证
var re=新的RegExp(“^4”);
if(number.match(re)!=null)
返回“签证”;
//万事达卡
//针对Mastercard 2017 BINs扩展更新
如果(/^(5[1-5][0-9]{14}| 2(22[1-9][0-9]{12}| 2[3-9][0-9]{13}|[3-6][0-9]{14}| 7[0-1][0-9]{13}| 720 0[0-9]{12}))$/。测试(数字)
返回“万事达卡”;
//美国运通
re=新的RegExp(“^3[47]”);
if(number.match(re)!=null)
返回“美国运通”;
//发现
re=新的RegExp(^(6011 | 622(12[6-9]| 1[3-9][0-9]|[2-8][0-9]{2}9[0-1][0-9]| 92[0-5]| 64[4-9])65);
if(number.match(re)!=null)
返回“发现”;
//食客
re=新的RegExp(“^36”);
if(number.match(re)!=null)
返回“用餐者”;
//用餐者-全权委托
re=新的RegExp(“^30[0-5]”);
if(number.match(re)!=null)
返回“用餐者-全权委托”;
//JCB
re=新的RegExp(“^35(2[89]|[3-8][0-9])”;
if(number.match(re)!=null)
返回“JCB”;
返回“”;
}
});
}(jQuery));
div{
边缘顶部:20px;
}

您的JS中有一些错误。在if条件中,您使用了“=”,而不是“=”。除此之外,我使用了不同的逻辑来解决问题。代码如下所示

(函数($){
//关于就绪函数
$(函数(){
var flag1=假;
var flag2=假;
$(“#userCardNumber”)。在(“keydown”,function()上{
if($(“#用户卡号”).val().length<1){
flag1=真;
}
});
$(“#userCardNumber2”)。在(“keydown”,function()上{
if($(“#userCardNumber2”).val().length<1){
flag2=真;
}
});
$(“#userCardNumber”)。在(“keyup”,function()上{
如果(flag1==false){
返回;
}
flag1=假;
var el=$(本);
cardType=el.val();
如果(cardType==3){
console.log(“美国运通”);
}else if(cardType==4){
控制台日志(“Visa”);
}否则如果(cardType==5){
控制台日志(“万事达卡”);
}否则如果(cardType==6){
console.log(“Discover”);
}否则{
console.log(“其他东西”);
}
log(“运行函数”)
});
$(“#userCardNumber2”)。在(“keyup”,function()上{
如果(flag2==false){
返回;
}
flag2=假;
var el=$(本);
cardType=el.val();
如果(cardType.length==1){
如果(cardType==3){
console.log(“美国运通”);
}else if(cardType==4){
控制台日志(“Visa”);
}否则如果(cardType==5){
控制台日志(“万事达卡”);
}否则如果(cardType==6){
console.log(“Discover”);
}否则{
console.log(“其他东西”);
}
}
log(“运行函数”)
});
});
}(jQuery));

键控上
只需检查
选择启动

(函数($){
//关于就绪函数
$(函数(){
$(“#userCardNumber2”)。在(“keyup”,