JQuery选择器理解错误
JQuery selectors missunderstanding
我正在尝试制作一个简单的树视图脚本,并从打开/关闭节点开始。但我遇到了一些问题:
$(function() {
$('#tree li.closedNode').on('click',function(e){
e.stopPropagation();
$(this).removeClass('closedNode').addClass('openedNode').children(':not(a.caption)').show();
})
$('#tree li.openedNode').on('click',function(e){
e.stopPropagation();
$(this).addClass('closedNode').removeClass('openedNode').children(':not(a.caption)').hide();
})
jsfiddle:http://jsfiddle.net/F33dS/14/
所以,然后你点击"点击这里",它正在关闭,更改类,但它仍然为"li.openedNode"触发事件。我知道,我错过了一些简单的事情,但什么?我真的找不出问题。那么,为什么它会以这种方式工作呢?
您正在将事件绑定到尚不存在的事物。
您需要使用.on()
,以便它针对所有匹配的元素,无论它们现在存在还是将来存在。
http://jsfiddle.net/F33dS/16/
$('#tree').on('click', 'li.closedNode', function(e){
e.stopPropagation();
$(this).removeClass('closedNode').addClass('openedNode').children(':not(a.caption)').show();
})
$('#tree').on('click', 'li.openedNode', function(e){
e.stopPropagation();
$(this).addClass('closedNode').removeClass('openedNode').children(':not(a.caption)').hide();
})
您的节点在页面加载时具有类openNode
。
脚本查找$('#tree li.openNode')
并匹配元素。
脚本查找$('#tree li.closedNode')
,但不匹配任何内容。
只有当用户单击元素时,才能找到$('#tree li.closedNode')
的匹配项。
因此,我们告诉它的父对象哪个存在,以便为两个匹配的子对象查找单击事件。一旦出现一个MATCHING子体(当您更改类名时),事件就会触发。
发件人http://api.jquery.com/on/
事件处理程序仅绑定到当前选定的元素;当代码调用.on()时,它们必须存在于页面上。为了确保元素存在并且可以选择,请在文档就绪处理程序中为页面上HTML标记中的元素执行事件绑定。如果将新的HTML注入到页面中,请选择元素,并在将新HTML放入页面后附加事件处理程序。或者,使用委托事件附加事件处理程序,如下所述。
委托事件的优点是,它们可以处理以后添加到文档中的子元素中的事件。通过选择在附加委托事件处理程序时保证存在的元素,可以使用委托事件来避免频繁附加和删除事件处理程序。
在原始代码中,您设置了正确的选择器,但当时没有匹配项。因此,当时存在的#tree
可以存储其后代上发生的事件。
还有一件事
为什么要使用jQuery隐藏和显示列表元素?你无论如何都要添加一个类,这样你就可以用CSS来完成。
- 文档就绪提供了错误的选择器高度
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- JavaScript类列表选择器错误
- 他们网站上的代码出现启动日期选择器错误
- jQuery选择器错误:无法识别的表达式
- 原型中漂亮的代码,如何省略'不是函数'空结果选择器上的错误
- 属性选择器不起作用(语法错误、无法识别的表达式)
- MVC4和日期选择器:“;0x800a01b6-JavaScript运行时错误:对象没有't支持属性或方法
- JQuery选择器理解错误
- jquery验证中生成的错误类的jquery选择器
- Jquery语法错误,id选择器上的表达式无法识别
- 未捕获错误:语法错误,无法识别表达式Jquery选择器单引号与双引号
- 选择id中带有双点的元素,错误:“#octo:cat”不是有效的选择器
- 错误:谷歌云端硬盘选择器今天停止加载
- 错误“属性'日期选择器'在带有打字稿的类型'IAugmentedJQuery'上不存在
- 角度材料的日期选择器日期错误
- 父后代 jquery 选择器中出现奇怪的错误
- 类型错误: $(..).日期选择器不是一个函数
- 角度 UI 日期选择器获取错误的日期
- j查询错误选择器上的点击功能