关于focusout和enter的Jquery ajax请求
我想在输入字段的焦点丢失或用户在输入字段中点击enter键时请求ajax查询 我有以下代码来执行此操作关于focusout和enter的Jquery ajax请求,jquery,keypress,focusout,Jquery,Keypress,Focusout,我想在输入字段的焦点丢失或用户在输入字段中点击enter键时请求ajax查询 我有以下代码来执行此操作 function editVK() { var input = $('.check_vk'); input.keydown(function () { // DO some markup }).focusout(function () { // execute ajax in function calculateVolle
function editVK() {
var input = $('.check_vk');
input.keydown(function () {
// DO some markup
}).focusout(function () {
// execute ajax in function
calculateVolleKist($(this));
return false;
}).on('keypress', function (e) {
var code = (e.keyCode ? e.keyCode : e.which);
if (code == 13) {
// execute ajax in function
calculateVolleKist($(this));
return false;
}
});
}
function calculateVolleKist(elem) {
var regel = elem.closest("tr");
var article_id = regel.attr('data-article_id');
var basket_id = regel.attr('data-basket_id');
var vk = parseFloat(formatToDecimal(elem.val()));
$.ajax({
url: 'beltramibasket.php?action=wijzig_volle_kist&basket_id='+basket_id+'&article_id='+article_id+'&vk='+vk,
type: 'GET',
dataType: "html",
async: true,
success: function(data) {
$('.basket_body').html("");
$('.basket_body').html(data);
editVK();
}
});
}
使用此代码时,我在输入中的第一个更改触发1请求。我的第二个更改触发2个请求,我的3个请求触发4个请求,依此类推
编辑
包括第二个功能。我的回答是HTML,我清除主体并将HTML放回主体中。之后,我再次执行函数editVK。因为我想在编辑输入框时触发其他请求。尝试在jQuery代码之前插入:
input.unbind('keydown');
input.unbind('focusout');
input.unbind('keypress');
无法100%确定这是否是问题的根源,但有可能您每次都在注册新的事件。尝试使用此代码,对我来说效果很好
var input = $('.check_vk');
input.focusout(function () {
// execute ajax in function
calculateVolleKist($(this));
return false;
}).keypress(function(event) {
if (event.which == 13 || event.keyCode == 13) {
//code to execute here
calculateVolleKist($(this));
return false;
}
}
});
您面临的问题是什么?有多少元素。请检查您使用了什么?您在此处发布的代码看起来是正确的。初学者面临的一个常见问题是,您可能在另一个Eventhandler中的某个位置注册了一个Eventhandler,可能是在keydown中,这会增加触发每个后续事件的函数的数量。或者,将类指定给多个元素,但忘记停止事件传播。当聚焦输入字段或在输入字段中按enter键时。触发ajax请求的函数被执行多次。在输入字段中第三次按enter键时,将发送4个ajax请求。当我更改输入字段并再次按enter键时,6个请求被发送,这使我的浏览器崩溃。这解决了问题,谢谢。我不知道我的方法是正确的还是最好的。但是现在它工作正常了。@JoachimVanthuyne虽然这解决了问题,但没有解决最初的问题。交换全身内容可能是错误的做法。在这种情况下,您基本上可以使用普通的http请求。。。