首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jquery: live('load',...)或实况(‘就绪’,...)不要在ajax加载的元素上工作!做什么呢?

Jquery: live('load',...)或实况(‘就绪’,...)不要在ajax加载的元素上工作!做什么呢?
EN

Stack Overflow用户
提问于 2011-10-22 02:33:14
回答 3查看 4.7K关注 0票数 1

给定:

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',...)"效果的常用方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-22 02:57:30

我处理这个问题的方法是将live()事件添加到您自己创建的自定义触发器中。然后,当ajax响应请求时,只需使用讨论的.triggerHandler() here来触发自定义触发器。这意味着您的ajax必须包含的只是triggerHandler()代码。它不是很理想,但它解决了所有元素类型都缺少一个有效的load()函数的问题。

票数 1
EN

Stack Overflow用户

发布于 2011-10-22 02:37:05

只需在GET的回调中执行$(myselect).selectmenu()即可。默认情况下,只有在GET成功时才会发生这种情况。

编辑:

有人提醒我,OP明确表示他不想在AJAX回调中包含上面的代码。我认为这是最好的方法,但如果禁止,让我采用另一种方法:

大多数元素都没有"onload“事件。jQuery只对images, scripts, frames, iframes, and the window object.识别它,所以没有什么需要绑定的。除了回调之外,你真的没有优雅的方法来确定加载新内容的成功与否。

因此,惟一的替代方法是使用setInterval设置一个循环,检查是否已经添加了内容,然后在该循环上运行selectmenu()。如下所示:

代码语言:javascript
运行
复制
window.loadingmyselect = setInterval(function () {
        if ($(myselect).length) {
            clearInterval(window.loadingmyselect);
            $(myselect).selectmenu();
            …
        }
    }, 300 /* or whatever */);

当然,这是一种令人讨厌的方法,但只有你这个操作员才知道它是必要的真正原因。

票数 0
EN

Stack Overflow用户

发布于 2011-10-22 02:37:41

将此代码添加到请求集的成功回调中。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7853740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档