【发布时间】:2021-08-09 07:34:06
【问题描述】:
不是绑定函数方面的专家。我在下面创建了 sn-p 来演示我正在尝试做的事情。
我想在每次输入输入字段的第一个字符时触发一个事件,但只输入第一个字符。即使用户清除输入并重新开始,我也希望它运行。
$("#userCardNumber") 如果我使用.one("keyup", function(),那么它只运行一次,如果用户清除字段、按退格键或以其他方式键入第一个字符,它就不会再次运行(据我了解,它已被解除绑定) /解除绑定)
$("#userCardNumber2") 我可以通过使用.on("keyup", function() 在该函数中添加一个if (element.length === 1) { } 来实现我的意图,但这似乎非常低效,因为它在每个键盘上运行,因为这是一个 14-15 的卡号字段额外的时间它不必要地运行。
试图学习最有效的做事方式,很好奇如何在不消耗额外的 keyups 计算的情况下达到预期的结果,就像我在 $("#userCardNumber2") 中所做的那样?
(function($) {
// On ready functions
$(function() {
$("#userCardNumber").one("keyup", function() {
var el = $(this);
cardType = el.val();
if (cardType = 3) {
console.log("AmEx");
} else if (cardType = 4) {
console.log("Visa");
} else if (cardType = 5) {
console.log("Mastercard");
} else if (cardType = 6) {
console.log("Discover");
} else {
console.log("something else");
}
console.log("Ran function")
});
$("#userCardNumber2").on("keyup", function() {
var el = $(this);
cardType = el.val();
if (cardType.length === 1) {
if (cardType = 3) {
console.log("AmEx");
} else if (cardType = 4) {
console.log("Visa");
} else if (cardType = 5) {
console.log("Mastercard");
} else if (cardType = 6) {
console.log("Discover");
} else {
console.log("something else");
}
}
console.log("Ran function")
});
});
}(jQuery));
div {
margin-top: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<input id="userCardNumber" type="text">
</div>
<div>
<input id="userCardNumber2" type="text">
</div>
【问题讨论】:
标签: jquery query-optimization keyup