输入文本maxlength
的{{1}}属性已定义为14。
以下代码在我(#gtin)
paste (CTRL+V)
输入时对API进行2次调用。但是,如果我手动输入值,则只有一次调用,一旦长度等于14:
values (with length = 14)
我认为$('#gtin').on('keyup',function(){
if($("#gtin").val().length > 13) {
var gtin = $("#gtin").val();
$.ajax({
type: 'GET',
url: 'https://api.priceapi.com/products/single?token=*Masked*&country=de&source=google-shopping¤tness=daily_updated&completeness=one_page&key=gtin&value=' + gtin,
async: false,
contentType: "application/json",
dataType: 'jsonp',
success: function(json) {
console.dir(json);
}
});
}
});
CTRL + V
为2 counts
,因此会发生双重调用。因此,当定义的输入长度等于14时,是一种更智能的API调用方式吗?哪个是绕过多个电话的最好方法,如果f.i.有人在输入' keyups
已经到达的情况下仍在键入密钥?
答案 0 :(得分:0)
您可以检查ctrl
键是否触发了事件:
$('#gtin').on('keyup',function(e){
if (!e.ctrlKey) {
// Your ajax call
}
});
答案 1 :(得分:0)
丑陋的解决方案,但会做到......
var ajaxRequestMade = false;
$('#gtin').on('keyup',function(){
var len = $("#gtin").val().length;
if (len > 13 && !ajaxRequestMade) {
ajaxRequestMade = true;
$.ajax(...);
}
// Optionally reset it
if (len < 14) {
ajaxRequestMade = false;
}
});
答案 2 :(得分:0)
您可能希望使用$("#gtin").val()
而不是使用this.value
进行两次函数调用。此处的上下文this
是您的input
框,只要您不通过将另一个对象绑定到您的未知函数来更改它。
答案 3 :(得分:0)
906609