好:
$("*").on("click", "body:not(._tlh_dropdown, ._tlh_dropdown_content)", function () {
几乎可以肯定不是你想要的。这为页面上的每个元素添加了一个事件处理程序,要求它检查来自 的事件<body>
是否已冒泡。这有点没有意义。
和
$("body").on("click", "*:not(._tlh_dropdown, ._tlh_dropdown_content)", function () {
您的测试页会有问题,因为<body>
除了您的标题之外没有其他内容。
将其更改为上面的第二件事(就像在您的原始问题中一样),然后在其中的内容之后添加一个<div>
带有一些文本的内容,然后单击该内容。或者,将其更改为:
$(document).on("click", "*:not(._tlh_dropdown, ._tlh_dropdown_content)", function () {
这将捕获从<body>
.
编辑——如果你使用$(document)
,它也是一个好主意(特别是如果你希望它工作:-) 向处理函数添加一个“事件”参数,并在每个函数中调用
event.stopPropagation();
在第一个事件处理程序(打开额外内容的那个)中,当标题上的“单击”冒泡到正文时,这将阻止第二个处理程序运行。对于第二个处理程序,停止传播并不那么重要,但它会避免重复尝试关闭添加的内容。
再编辑一些——见下面的评论;“关闭”处理程序有一些微妙之处,使得使用“开启”选择器方法实现它有点问题。