给定:
1)我已经完全加载了html页面
2)单击链接将GET请求发送到Rails
3) Rails的答案是一个带有一些标记的小部分(fx。选择我调用"$(myselect).selectmenu()"
的jquery插件SelectMenu (或任何其他Jquery UI插件)所在的国家/地区,这使得我的原始外观更高级。
希望我的部分不包含Jquery代码,我想将"$(myselect).selectmenu()“放在js文件中的某个地方,并以某种方式将其附加到我的select元素。
我尝试过"$(myselect).live('load',function(){...})"
和"$(myselect).load()"...
,但正如文档所说,它只适用于具有URL的元素。“‘ready”事件仅在加载主页时有效。
1)我不想把这个js文件包含在我的ajaxy加载的部分文件中,但是要把它包含在加载的主页中。
2)我不想在jQuery.ajax 'success‘回调中包含"$(myselect).selectmenu()"
作为一些SO主题的答案建议。
live()可以处理像'change‘或'click’这样的事件,但我找不到适合我需要的事件。“‘ready”和“load”事件不起作用。
有没有实现"live('load',...)"
效果的常用方法?
发布于 2011-10-22 02:57:30
我处理这个问题的方法是将live()
事件添加到您自己创建的自定义触发器中。然后,当ajax响应请求时,只需使用讨论的.triggerHandler()
here来触发自定义触发器。这意味着您的ajax必须包含的只是triggerHandler()
代码。它不是很理想,但它解决了所有元素类型都缺少一个有效的load()
函数的问题。
发布于 2011-10-22 02:37:05
只需在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 */);
当然,这是一种令人讨厌的方法,但只有你这个操作员才知道它是必要的真正原因。
发布于 2011-10-22 02:37:41
将此代码添加到请求集的成功回调中。
https://stackoverflow.com/questions/7853740
复制相似问题