关于focusout和enter的Jquery 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

我想在输入字段的焦点丢失或用户在输入字段中点击enter键时请求ajax查询

我有以下代码来执行此操作

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请求。。。