Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery document.on()子选择器_Javascript_Jquery_Html - Fatal编程技术网

Javascript jQuery document.on()子选择器

Javascript jQuery document.on()子选择器,javascript,jquery,html,Javascript,Jquery,Html,我有一个ul,我想在单击子li时创建一个警报 <ul id="myul"> <div class="test"> <div class="test1"> <li></li> <li></li> </div> </div> </ul> 我不能使用#myul>li,因为我以前有另一个孩

我有一个ul,我想在单击子li时创建一个警报

<ul id="myul">
    <div class="test">
        <div class="test1">
            <li></li>
            <li></li>
        </div>
    </div>
</ul>

我不能使用
#myul>li
,因为我以前有另一个孩子
li
ul
元素只能包含
li
元素,最终与
ol
ul
元素混合。您可以将html和jquery修改为:

$(文档)。在('click','myulli',函数()上{
警惕(“嘿!”);
});
ul,
李{
列表样式类型:无;
}

    • 锉刀
    • 萨德

您可以简单地使用css子选择器,如下所述。它将应用于直接子代,而不仅仅是任何后代

注:根据标准,您不能使div直接成为ul的子女。div标签应该放在li的里面

jQuery("#myul > li").click(function(){

    alert('hey!');

});
你可以用

$(document).on('click','#myul li', eventHandler) 
这意味着您正在文档上注册一个事件处理程序,但只有当事件源于
#myul li
时才会调用
eventHandler
,即对于
myul
的任何
li
子级,而不仅仅是直接子级,也可以是适合您情况的后代

但我建议您甚至将事件注册的范围缩小到最接近的
li
祖先,如下所示

$('#myul').on('click','li', eventHandler)

ul
li
元素之间使用
div
在语义上是不正确的:)您可以使用
$('#myul')。在('click','li',urFunction)
-上调用您的函数,在
ul
中的任何
li
上调用click事件,正如@Arkantos正确地说的那样,这不是结构合理的代码。li标签应始终位于ul标签的正下方。你不能把你的div标签放在你的ul之外吗?那么您的示例代码就可以运行了。@Arkantos您好,谢谢,不幸的是,我使用了一个小部件为这个ul添加了一个自定义滚动条,这个小部件创建了两个div.Ok。。但是,如果您可以控制该小部件的源代码,或者您知道有人可以编辑它,请告诉他们遵循语义。不管怎样,我用你当前的标记发布了一个答案,看看:)
#myul>li
意味着只有直系子女,而不仅仅是任何后代:)你应该更新你的answer@Arkantos:-是的,我做了,非常感谢!!考虑到OP的分数,
li
不是
ul
的直接子女,您的答案仍然无法解决OP的问题。。请根据w3.org标准审查并更新:)@Arkantos:-相关信息。我们不能将div作为ul的直接子对象。div标签应该放在li的里面:)是的。我把这个指向OP,但他使用的是一些他无法控制的小部件,所以他只是想在当前状态下解决这个问题
$('#myul').on('click','li', eventHandler)