2013-07-16 25 views
1

我结合一些jQuery的事件处理程序,其中最初工作精细的页面的元素,但是如果用户选择页面上的单选按钮时,该元素被删除;他们可以通过选择另一个单选按钮来恢复它;但是当数据通过AJAX加载时,该函数不再从事件处理函数中触发。绑定的事件处理程序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什么元素?

+0

向我们展示乌尔HTML结构 – krishgopinath

+0

使用事件代表团 –

+0

添加一些你的HTML,所以我们可以看到您的绑定的范围。当然,替换html会破坏内部元素和任何处理程序分配给他们。如果你把一些HTML在这里,我们可以帮助您应对使用“活”或“代表”的事件处理程序 – Luke

回答

5

试试这个:

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

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

您需要委托的事件...

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

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

它始终是一个更好的主意,以取代委托给文件,静态祖先的事件,其事件绑定。在这种情况下'#buy_now'将是静态的父母,因为它是随时显示在页面上,当事件被约束。