jQuery addClass定位正确的元素 - 但有时只应用类

时间:2014-11-11 15:08:52

标签: javascript jquery ruby-on-rails twitter-bootstrap

对于上下文 - 我目前正在开发一个非常基本的Rails应用程序,该应用程序旨在根据输入到表单中的参数来吐出HTML模板。但是,我目前遇到了真正奇怪的问题。我正在使用Bootstrap 3,并且有一个包含下拉子菜单的导航 - 因为Bootstrap从Bootstrap 3中删除了这个功能,我必须借用here中的代码才能使其正常工作。

在JSFiddle中它很有用,所以创建一个没有意义;事实上,在我static info page上,它很有效。在every other page上,它大约有10%的时间工作,通常直接在刷新后,其余时间没有响应。我已经检查了Firebug中正在进行的操作,并确定了正确的元素(Firebug通过突出显示为黄色显示),但并不总是打开'打开'类添加到它。

我完全不知所措。这是Bootstrap的事吗?一个Rails的事情?为什么有时有效?!

编辑 - 这是有问题的jQuery。真的很基本。

$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
    event.preventDefault(); 
    event.stopPropagation(); 
    $(this).parent().toggleClass('open');
});

1 个答案:

答案 0 :(得分:0)

好的,这可能需要多次尝试,因为我无法测试这些变化。

$('ul.dropdown-menu [data-toggle=dropdown]')是一个jquery选择器,用于选择[data-toggle=dropdown]ul元素子元素dropdown-menu元素ul

由于类dropdown-menu没有$('.dropdown-toggle[data-toggle=dropdown]').on('click', function(event) { event.preventDefault(); event.stopPropagation(); $(this).parent().toggleClass('open'); //alert('clicked'); //console.log('clicked'); }); 元素,因此最终不会选择任何内容。

我想你想要以下内容:

<ul>

注意:
- 没有<a>标记。您可以使用[data-toggle]标记,但这是不必要的 - 类和$('.dropdow-toggle')之间没有空格,因为它们是相同的元素。

要测试它,您可以取消注释警报或控制台日志行。如果它正常工作,它会在每次点击时提醒您一次更改菜单状态。

测试选择器
您可能会发现有用的东西是在浏览器的控制台中使用jquery选择器。打开控制台并发送{{1}}之类的命令。它将显示该选择器选择的所有元素。你可以通过这种方式解决很多问题。