Javascript jquery on单击选择器附着多个元素

Javascript jquery on单击选择器附着多个元素,javascript,jquery,Javascript,Jquery,我通常处理使用ajax加载的元素的单击事件,如下所示: $(document).on("click", ".selector", function () { ...} $('.selector-parent').add(document).on("click", ".selector", function (e) { e.stopPropagation(); console.log(e.delegateTarget); }); 但在我多次加载内容的特定情况下,不知何故$(do

我通常处理使用ajax加载的元素的单击事件,如下所示:

$(document).on("click", ".selector", function () { ...}
$('.selector-parent').add(document).on("click", ".selector", function (e) {
    e.stopPropagation();
    console.log(e.delegateTarget);
});
但在我多次加载内容的特定情况下,不知何故$(document)不起作用,只有当我将其附加到父级
$('.selector parent')时才起作用

根据具体情况,并不总是有父选择器。是否可以将其附加到文档,如果存在选择器,请使用它,例如:

$(document, '.selector-parent').on("click", ".selector", function () { ...}

我不想设置任何if-else来搜索父元素是否存在,但要这样使用它。

您只需执行以下操作:

$(document).on("click", ".selector", function () { ...}
$('.selector-parent').add(document).on("click", ".selector", function (e) {
    e.stopPropagation();
    console.log(e.delegateTarget);
});
这里有一点解释。您选择了两个父元素(可能不存在)使用
add
方法将
document
合并到一个集合中。之后,您需要确保事件不会被
选择器父级
document
处理两次,因此无论哪个元素先处理它,它都会阻止事件进一步冒泡
e.stopPropagation();

因此,如果没有父级
.selector父级
作为单击的
.selector
的祖先,则
文档
将处理事件。如果
.selector父级
存在,则它将执行此任务,并且不会使用
文档

查看下面的演示,了解它在这两种情况下的工作原理

$('.selector parent')。添加(文档)。在(“单击“,”.selector”),函数(e){
e、 停止传播();
警报(如delegateTarget.nodeName);
});

父项存在
不存在父项

因此,如果父元素存在,则要将
单击处理程序委派给父元素;如果不存在,则委派给
文档
,而不使用
如果
,则委派给
为什么?它必须使用
$(文档)
。仔细检查选择器名称、控制台和函数执行。我知道它必须工作,但它不能工作,所以可以用需要的方式或类似方式来完成吗?@user4675957如果它不能使用
$(文档)
页面上的其他地方一定有错误,导致它无法工作!