Jquery - 模糊和 keyup 多次触发

标签 jquery blur keyup

我有这段代码,它启用输入,聚焦它,然后在您单击或按 Enter 时触发 ajax 请求。

$("body").on('click', '.input', function(){
        id = $(this).attr('id');
        $("#inp" + id).prop('disabled', false).focus();

        $("#imp" + id).on('blur keyup',function(e) {  
            if (e.type === 'blur' || e.keyCode === 13) {

                    $.ajax({ url : 'file.php?var=' + var + '&nextvar=' + nextvar, 
                        success: function(response) {
                            console.log (response);

                        } 
                    })
                $("#imp" + id).prop('disabled', true);
            }
        });  

    })

它似乎工作正常,除了按 Enter 会导致它多次触发 ajax 之外。

谁能告诉我为什么吗?

谢谢

最佳答案

只需添加一个简单的检查是否完成即可。然后在您准备好进行另一次点击检查时刷新它

var done = false;

function ajaxCall() {
    if(!done) {
        $.ajax({ url : 'file.php?var=' + var + '&nextvar=' + nextvar, 
            success: function(response) {
                console.log (response);
                done = true;
            } 
        });
    }
    $("#imp" + id).prop('disabled', true);
}

$(document).ready(function() { 
  $("body").on('click', '.input', function(){
        id = $(this).attr('id');
        $("#inp" + id).prop('disabled', false).focus(); 
  });

    $("#imp" + id).on('blur',function(e) {  ajaxCall() });
    $("#imp" + id).on('keyup',function(e) {  if(e.keyCode === 13) ajaxCall() });
});

它仅运行一次(注意done = false),如果您想重置它,请再次将全局“done”变量设置为 false。

关于Jquery - 模糊和 keyup 多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554370/

相关文章:

Jquery 模糊运行两次——为什么?

reactjs - 将光标重置到 <textarea> React 的开头

jquery - 如何找到最近的表 jQuery

jquery - 如何禁用密码字段上的空格键

javascript - 加载的 div 的内容不会出现在加载的 HTML 中

javascript - Ajax 内存泄漏

javascript - jquery ajax 更改类点击数据 id

javascript - 如何使用 ajax 填充选择表单?

vector - 如何在 Inkscape 中制作模糊

javascript - Cmd Enter keyup组合检测使用javascript