2014-02-28 38 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; 
     } 
    } 
});