在我的erb文件中,我有一个这样的脚本:
function checkJquery() {
if(window.jQuery) {
jQuery(document).ready(function() {
alert('onready');
$('div#habla_topbar_div').click(function() {
alert('onclick');
});
});
}
else {
window.setTimeout(checkJquery, 1000);
}
}
我得到了' onready'提醒,但是' onclick'警报不起作用。知道我可能做错了吗?
编辑: div是Olark聊天集成的一部分,erb文件除了配置和上面的脚本外什么都没有。
div' habla_topbar_div'被定义为。 图片:
答案 0 :(得分:1)
您的代码看起来不错,也许您没有div
id="habla_topbar_div"
。
Check this Fiddle找出你错在哪里。
<强>更新强>
如果您已经拥有div
id="habla_topbar_div"
,那么在呈现之前或运行时,某些代码或应用程序可能会更改了Id的值。
尝试为&#34; habla_topbar_div&#34;添加一个唯一的类名称。 div
喜欢这样:
<div id="habla_topbar_div" class="habla_topbar_div_unique habla_topbar_div_normal ...">
并使用此:
$('.habla_topbar_div_unique').click
而不是:
$('div#habla_topbar_div').click
<强> Check Fiddle Demo 强>
答案 1 :(得分:1)
这里有几个特定于Rails的问题
-
<强>团强>
由于大多数Rails应用程序使用Turbolinks
或类似内容,因此您必须delegate
your Javascript(通常)来自document
对象:
#app/assets/javascripts/application.js
$(document).on("click", "#habla_topbar_div", function() {
alert('onclick');
});
如果您在没有嵌入其他JS函数的情况下使用它,它应该可以工作,考虑到你有一个id=habla_topbar_div
的div。
-
Turbolinks活动
其次,您希望确保使用Turbolinks event hooks之一替换标准$(document).ready
函数。您将要执行以下操作:
#app/assets/javascripts/application.js
var your_function = function(){
...
}
$(document).on("page:load ready", your_function);