2014-02-28 87 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個請求等單元我的瀏覽器崩潰。

編輯 包括第二功能。我的回覆是HTML,我清除了body並將html放回到body中。之後,我再次執行editVK函數。因爲我想在編輯輸入框時觸發其他請求。

+0

什麼你面對 –

+0

多少元素「.check_vk」的問題,你用? – 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; 
     } 
    } 
});