1

我将一些 jQuery 事件处理程序绑定到页面中的一个元素,最初工作正常,但是如果用户选择页面上的单选按钮,该元素将被删除;他们可以通过选择另一个单选按钮将其恢复;但是,当 AJAX 重新加载数据时,该函数不再从事件处理程序中触发。

我用这个绑定它:

jQuery(document).ready(function(){

    jQuery('#buyout_field').mouseleave(function() {
        update();
    });    

    jQuery('#buyout_field').focusout(function() {
        update();
    });

});

回顾一下,最初运行良好,但是一旦 AJAX 删除然后将数据放回去,它就不再运行了。

下面是运行 AJAX 的代码:

function update() {

    getAjaxData(loadUrl, dataObject, 'GET', 'json')

        .done(function(response) {

            // Add/Hide other data
            jQuery('#buy_now').html(response.buy_now);            

        })

    // End

}

function getAjaxData(loadUrl, dataObject, action, type) {

    return jQuery.ajax({
        type: action,
        url: loadUrl,
        data: dataObject,
        dataType: type
    });    

}

元素buyout_field包含在buy_now元素中。

元素不是放回DOM还是什么的?

4

2 回答 2

5

试试这个:

jQuery('#buy_now').on('mouseleave', '#buyout_field', function() {
    update();
});

jQuery('#buy_now').on('focusout', '#buyout_field', function() {
    update();
});
于 2013-07-16T18:12:30.840 回答
2

您需要委托事件...

 jQuery(document).on('focus', '#buyout_field', function() {
     update();
 });

 jQuery('#buyout_field').on({
   mouseleave : function() {
       update();
   }, $(document)
 });

将委派给 document 的事件替换为绑定事件的静态祖先总是一个更好的主意。在这种情况下'#buy_now',将是静态父级,因为当事件绑定时它始终存在于页面上。

于 2013-07-16T18:11:05.697 回答