Javascript 在jQuery中,如何在不基于事件的情况下监视动态填充的元素(AJAX)?
我在页面加载时有以下标记:Javascript 在jQuery中,如何在不基于事件的情况下监视动态填充的元素(AJAX)?,javascript,ajax,jquery,Javascript,Ajax,Jquery,我在页面加载时有以下标记: <select name="sel_billing_address"></select> 但是因为它是动态加载的,所以我需要使用.live()或其他方法来监视它。如果我使用live('change')监视它,那么它工作得很好——但是我需要在选择框可能没有更改时使用这些值 .live('load')似乎是一个明显的选择,但这只在加载元素时起作用-select元素本身在页面加载时加载,此时它是空的。我也尝试过在选项而不是SELECT上使用.liv
<select name="sel_billing_address"></select>
但是因为它是动态加载的,所以我需要使用.live()或其他方法来监视它。如果我使用live('change')监视它,那么它工作得很好——但是我需要在选择框可能没有更改时使用这些值
.live('load')似乎是一个明显的选择,但这只在加载元素时起作用-select元素本身在页面加载时加载,此时它是空的。我也尝试过在选项而不是SELECT上使用.live('load'),但这似乎也不可用
还值得注意的是,我不能更改标记、页面加载元素的方式,也不能插入最初更改select的脚本的回调参数——所有内容都是外部的
非常感谢您的帮助。请查看。它的工作方式与.live()方法相同,但与live不同,它不仅限于绑定到您可以查看的事件。这可能为您提供了一种方法,可以潜入您无法直接访问的ajax回调
// Use the Global Ajax Event "ajaxComplete"
$('select[name=sel_billing_address]').bind('ajaxComplete', function () {
// Check to see if select has any option elements yet
if ($(this).find('option').length > 0) {
// Unbind the ajax event
$(this).unbind('ajaxComplete');
// Do your stuff
// Here...
}
});
如果您查看我链接到的jquery页面,您可以看到“ajaxComplete”出现在任何“complete”之后
编辑:是的。。。这仍在使用事件,但我认为它将解决您的问题。您不能在ajax函数的回调(success:)函数中执行此操作吗?不幸的是,不能。我忘了提到这一点。我无法访问页面上已经存在的任何代码,包括标记或已经加载的任何脚本。这在任何意义上都是一个插件。@loxaxx,谢谢!我和询问者有同样的问题,
livequery
非常棒。链接不再有效,livequery到github回购的直接链接在这里:
jQuery('select[name=sel_billing_address] option:selected');
// Use the Global Ajax Event "ajaxComplete"
$('select[name=sel_billing_address]').bind('ajaxComplete', function () {
// Check to see if select has any option elements yet
if ($(this).find('option').length > 0) {
// Unbind the ajax event
$(this).unbind('ajaxComplete');
// Do your stuff
// Here...
}
});