2014-02-28 3 views
0

Я хочу запросить запрос ajax, когда фокус на поле ввода теряется или когда пользователь попадает в поле ввода.Запрос JQuery 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 и т. Д.

EDIT Включенная функция 2. Мой ответ - это HTML, я очищаю тело и вернул html в тело. После этого я снова выполняю функцию editVK. Потому что я хочу вызвать другой запрос при редактировании окна ввода.

+0

Что вопрос вы столкнулись с «.check_vk» –

+0

Сколько элементов вы используете? – ReeCube

+0

Код, который вы разместили здесь, выглядит правильно. Вы сталкиваетесь с проблемой (довольно обычным начинающим), либо что вы где-то регистрируете Eventhandler внутри другого обработчика событий (возможно, в 'keydown'), что увеличивает количество функций, запускающих потенциально, что каждое последующее событие. Кроме того, у вас есть класс, присвоенный нескольким элементам, и забыл прекратить распространение события. – Christoph

ответ

0

Попробуйте вставить это перед кодом JQuery:

input.unbind('keydown'); 
input.unbind('focusout'); 
input.unbind('keypress'); 

не 100% уверен, что если это является источником вашей проблемы, но вполне возможно, что ваши регистрируют события каждый раз новые.

+0

Это решило проблему, спасибо. Я не знаю, правильный ли мой подход или «лучший». Но теперь он работает правильно. –

+0

@JoachimVanthuyne, хотя это исправляет проблему, она не затрагивает первоначальную проблему. Обмен содержимым всего тела, вероятно, является неправильным способом. В таком случае вы могли бы пойти на обычный HTTP-запрос ... – Christoph

0

попробовать с этим кодом она работает нормально для меня

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; 
     } 
    } 
});