Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Jquery:live('load',…)或live('ready',…)不能在ajax加载的元素上工作!你会怎么做?_Ruby On Rails_Ajax_Jquery - Fatal编程技术网

Ruby on rails Jquery:live('load',…)或live('ready',…)不能在ajax加载的元素上工作!你会怎么做?

Ruby on rails Jquery:live('load',…)或live('ready',…)不能在ajax加载的元素上工作!你会怎么做?,ruby-on-rails,ajax,jquery,Ruby On Rails,Ajax,Jquery,鉴于: 我已经完全加载了html页面 2我单击向Rails发送GET请求的链接 3 Rails的答案是一个小部分,有一些标记fx。选择我将jquery插件SelectMenu应用到的国家,或调用$myselect.SelectMenu的任何其他jquery UI插件,这会使我的原始版本看起来更漂亮 为了使我的部分不包含Jquery代码,我想将$myselect.selectmenu放在js文件中的某个位置,并以某种方式将其附加到我的select元素 我尝试了$myselect.live'load

鉴于:

我已经完全加载了html页面

2我单击向Rails发送GET请求的链接

3 Rails的答案是一个小部分,有一些标记fx。选择我将jquery插件SelectMenu应用到的国家,或调用$myselect.SelectMenu的任何其他jquery UI插件,这会使我的原始版本看起来更漂亮

为了使我的部分不包含Jquery代码,我想将$myselect.selectmenu放在js文件中的某个位置,并以某种方式将其附加到我的select元素

我尝试了$myselect.live'load',函数{…}和$myselect.load。。。但正如文档所述,它只适用于具有URL的元素“就绪”事件仅在主页加载时有效

1我不想在ajaxy加载的部分中包含此js文件,但要将其包含在加载的主页中

2我不想将$myselect.selectmenu包含在jQuery.ajax“success”回调中,作为一些SO主题的答案建议

live可以处理“更改”或“单击”等事件,但我找不到适合我需要的事件“就绪”和“加载”事件不起作用

是否有一些常见的实践来实现活“荷载”,。。。效果如何

只需执行回调中的$myselect.selectmenu即可获取。在默认条件下,仅当GET成功时才会发生

编辑:

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

大多数元素没有onload事件。jQuery只为识别它,因此没有任何绑定。除了回调之外,您真的没有优雅的方法来确定加载新内容是否成功

因此,您唯一的选择是使用setInterval设置一个循环,检查您的内容是否已添加,并在该点上运行selectmenu。大概是这样的:

window.loadingmyselect = setInterval(function () {
        if ($(myselect).length) {
            clearInterval(window.loadingmyselect);
            $(myselect).selectmenu();
            …
        }
    }, 300 /* or whatever */);

当然,这是一种令人讨厌的方法,但只有你和OP知道为什么需要这样做的真正原因。

将此代码添加到requset的成功回调中。

我处理此问题的方法是将实时事件添加到你自己创建的自定义触发器中。然后,当ajax响应请求时,只需使用前面讨论的.triggerHandler来触发该自定义触发器。这意味着您的ajax必须包含的全部是triggerHandler代码。这并不理想,但它解决了所有元素类型都缺少工作加载函数的问题。

OP特别声明,我不想在jQuery.ajax'success'回调中包含$myselect.selectmenu作为一些SO主题的答案建议。然后OP应该解释这个位置,因为这与他明显的需要背道而驰。在成功回调中包含这个有什么不对?什么代码?我问的是一般模式。我注意到的唯一一件事是,我确实通过Rails link_to:remote=>true获取请求,而不是通过Jquery.ajax。@Stainslaw$.GET是$的缩写。ajaxI知道,这可以通过成功回调轻松完成,但是如果我的应用程序中的所有标签都能自动应用Selectmenu plugin,那就太好了。@Stanislaw创建回调函数应该很简单,这样可以多次调用它,避免任何已经应用了它的Selectmenu元素。我想,这在逻辑上要清晰得多,而不是在成功回调的主体中调用selectmenu。我检查你的答案是否正确。但如果有人能找到更优雅的解决方案,也请在这里发布!