内联 Javascript 在 Rails 3.1 上重新渲染部分 ruby​​ 时无法正常工作

Posted

技术标签:

【中文标题】内联 Javascript 在 Rails 3.1 上重新渲染部分 ruby​​ 时无法正常工作【英文标题】:Inline Javascript not working properly on rerendering a partial in ruby on rails 3.1 【发布时间】:2013-05-06 12:07:55 【问题描述】:

在我的项目中,我们在使用一些实例变量的部分中有内联 javascript。当我们在成功调用 ajax 后重新渲染该部分时,该脚本没有运行。

你能帮我解决这个问题吗?

例如

_partial.html.erb

 <div class="someclass"></div>
 <script>
    $(document).ready(function()
       $(".someclass").hide();
    );
 </script>

从 js.erb 文件替换此部分时,脚本标记未运行。

【问题讨论】:

【参考方案1】:

您的页面已加载。 ready 事件很久以前就过去了,现在没人听了。

所以,如果你在 Ajax 加载的脚本中有 $(document).ready,代码将永远不会被执行。

解决方案:

删除“就绪”事件并直接触发代码:

 <div class="someclass"></div>
 <script>
   $(".someclass").hide();
 </script>

【讨论】:

感谢您的回复,但它仍然无法正常工作。我们在脚本中使用的另一个插件是可拖动的,$('.someclass').draggable(); 它第一次运行,但在重新渲染部分后不运行。我正在使用实例变量,所以我无法将此代码移动到通用 js 文件中 @abhas,如果您使用Rails生成代码,请检查html是否正确传递(不是转义的html和js)。【参考方案2】:

在我看来,在ajax成功事件上手动更新DOM后没有触发ready事件,因此没有执行回调函数。

【讨论】:

【参考方案3】:

最后,我发现我认为非常适合我要求的答案是将javascript放入js.erb部分并在html.erb和其他js.erb files中相应地呈现它。

【讨论】:

以上是关于内联 Javascript 在 Rails 3.1 上重新渲染部分 ruby​​ 时无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

rails 3.1邮件程序中的asset_url

用于 JavaScript 的 Rails 3.1 资产管道

Rails 3.1 资产预编译 - 包括所有 javascript 文件

Rails 3.1 资产管道和手动订购的 Javascript 需要

针对 Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [关闭]

将 Rails 3.1 项目部署到 Heroku 时出现问题:找不到 JavaScript 运行时