通过锁定的AJAX页面使jQuery事件绑定很好地发挥作用

时间:2012-01-09 20:48:07

标签: jquery asp.net ajax

我正在与通过第三方提供商托管其网站的客户合作。也就是说,第三方(Network Solutions,简称NS)托管电子商务网站,并提供基于Web的界面来修改网站。这在定制网站方面显然有很多局限性。该站点还使用NS创建的ASP.NET控件。其中一些是简单的绑定控件(例如<%ns:Product.Price%>等等稍微复杂一些,例如Dropdown控件,其列出了产品的各种尺寸(例如10lb,20lb 30lb袋)。 / p>

后一种控制是我遇到的问题。当您选择新的产品尺寸时,控件通过AJAX以某种方式实现部分回发,加载新的价格,描述等,并刷新屏幕。我不确定AJAX使用了什​​么机制,源代码没有给我任何提示。

无论如何,我有一些我需要在下拉列表更改时调用的自定义代码。在document.ready()上,我绑定了Select元素的change()事件来调用我的代码(例如$('select').change(){dostuff})但是这仅在第一次更改Dropdown时有效。当AJAX更新时,绑定将丢失。 / p>

基本上,我需要的是检测到发生了部分回发,或者甚至只检测到已经呈现了新的SELECT控件,并重新绑定事件。

可以这样做。我也对其他想法持开放态度。我只是需要它才能工作。

2 个答案:

答案 0 :(得分:1)

使用事件委托:

$(document).on('change', 'select', function() {
    // Your code here
});

如果你正在使用jQuery< 1.7 - 改为使用delegate

$(document).delegate('select', 'change', function() {
    // Your code here
});

注意如何切换参数......


出于性能原因,您应该将事件绑定到最接近select元素的DOM节点。例如,如果您知道select元素的父元素没有更改,那么您将使用它:

$('#theSelectsParent').on('change', 'select', function() {
    // Your code here
});

进一步阅读:

jQuery .delegate()
jQuery .on()
The Difference Between jQuery’s .bind(), .live(), and .delegate() - 在.on()之前编写,但仍然是一个很好的阅读。

答案 1 :(得分:0)

您可以使用jquery live()函数。

  

为现在和将来与当前选择器匹配的所有元素附加事件处理程序。

在此处阅读更多内容:http://api.jquery.com/live/

$('select').live("change", function(){
 // do stuff
});