Jquery没有使用div id触发click()来触发

时间:2014-08-10 08:25:33

标签: javascript jquery html ruby-on-rails

在我的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'被定义为。 图片: via 'Inspect Element'

2 个答案:

答案 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);