Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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
jQuery on()和stopPropagation()的关系_Jquery_Stoppropagation - Fatal编程技术网

jQuery on()和stopPropagation()的关系

jQuery on()和stopPropagation()的关系,jquery,stoppropagation,Jquery,Stoppropagation,我有一个从左侧滑入的侧窗格,使用get()动态添加内容。我希望所有在窗格外的单击都能通过触发函数使其关闭。根据我读到的其他问题,我提出了以下代码 $('html').click(function() { if (side_showing) { close_side(); } }); $(document).on("click", "#side", function(event) { event.stopPropagation(); }); 我似乎无

我有一个从左侧滑入的侧窗格,使用get()动态添加内容。我希望所有在窗格外的单击都能通过触发函数使其关闭。根据我读到的其他问题,我提出了以下代码

$('html').click(function() {
    if (side_showing) {
        close_side();
    }
});

$(document).on("click", "#side", function(event) {  
    event.stopPropagation();
});

我似乎无法让它工作。我知道正在触发
on()
函数,但是
event.stopPropagation
似乎没有触发。任何提示?

您不能将
stopPropagation()
用于委托事件处理(事件处理程序位于父级上)

这是因为正是事件传播首先使委托事件处理工作,所以在调用事件处理程序时,事件已经传播

代码中发生的事情的顺序是:事件传播到文档对象,然后调用事件处理程序。因此,当您调用
event.stopPropagation()
时,它不会执行任何操作,因为事件已经传播

如果需要阻止父对象获取事件传播,则不能使用委托事件处理。您必须将事件处理程序直接分配给对象本身,以便在事件传播之前拦截事件。如果这些是动态创建的对象,则必须在创建之后立即为其分配事件处理程序


我知道的唯一其他解决方案是将事件处理程序放在您不想看到这些事件的父对象上,并确保这些事件处理程序忽略源自您的
#端
对象的事件。

@J4G-我的答案中添加了几个选项。在对象上使用.on(“单击”)后,我可以使用.click()吗?@J4G-抱歉,我不明白你在问什么。使用.on()将单击事件绑定到对象是否允许使用.click()获取事件?@J4G-你不能调用
。click()
来“获取”事件。绑定事件处理程序允许您安装回调函数,该函数将在将来某个时候发生单击事件时调用。您是否真正了解
stopPropagation()的含义?看一看