Jquery - размытие и срабатывание клавиш запускается несколько раз - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть этот код, который разрешает ввод, фокусируется на нем и затем запускает запрос 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 несколько раз.

Кто-нибудь может посоветовать почему?

Спасибо

1 Ответ

0 голосов
/ 28 сентября 2018

Просто добавьте простую проверку, выполнено или нет.Затем обновляйте его всякий раз, когда вы готовы выполнить еще одну проверку щелчком

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» var false снова.

...