假设:
1)我已完全加载html页面
2)我点击链接向Rails发送GET请求
3)Rails的答案是一个小部分有一些标签(fx。选择国家)我应用jquery插件SelectMenu(或任何其他Jquery UI插件)调用"$(myselect).selectmenu()"
,这使我的原始看起来更好。 / p>
想要我的部分不包含Jquery代码,我想在js文件中的某处放置“$(myselect).selectmenu()”并以某种方式将它附加到我的select元素。
我尝试了"$(myselect).live('load',function(){...})"
和"$(myselect).load()"...
但是正如文档所说,它仅适用于具有网址的元素。 'ready'事件仅适用于主页加载。
1)我不想在我的ajaxy加载部分包含这个js文件,但是它包含在加载的主页面中。
2)我不想在jQuery.ajax'成功'回调中加入"$(myselect).selectmenu()"
作为一些SO主题的答案建议。
live()适用于“更改”或“点击”等事件,但我无法根据自己的需要找到合适的事件。 “准备好”和“加载”事件不起作用。
是否有一些常见的做法可以达到"live('load',...)"
效果?
答案 0 :(得分:1)
我处理此问题的方法是将live()
事件添加到您自己创建的自定义触发器中。然后,当ajax响应请求时,只需使用.triggerHandler()
讨论的here来触发该自定义触发器。这意味着您的所有ajax必须包含triggerHandler()
代码。它并不理想,但它处理的是缺少所有元素类型的load()
函数。
答案 1 :(得分:0)
只需在GET回调中执行$(myselect).selectmenu()
即可。在默认条件下,只有在GET成功时才会发生。
编辑:
我被提醒OP明确表示他不想在AJAX回调中包含上述代码。我认为这是最好的方法,但如果禁止的话,让我采取另一种方法:
大多数元素都没有“onload”事件。 jQuery只识别它images, scripts, frames, iframes, and the window object.所以没有什么可以绑定的。除了回调之外,你真的没有优雅的方法来确定加载新内容的成功。
因此,您唯一的选择是使用setInterval
设置循环,检查您的内容是否已添加,并在此时运行selectmenu()
。像这样:
window.loadingmyselect = setInterval(function () {
if ($(myselect).length) {
clearInterval(window.loadingmyselect);
$(myselect).selectmenu();
…
}
}, 300 /* or whatever */);
当然,这是一种令人讨厌的方法,但只有你知道OP为什么必要的真正原因。
答案 2 :(得分:-2)
将此代码添加到您的请求的成功回调中。