内联 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 时无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
用于 JavaScript 的 Rails 3.1 资产管道
Rails 3.1 资产预编译 - 包括所有 javascript 文件
Rails 3.1 资产管道和手动订购的 Javascript 需要