Javascript 如果父事件为',为什么嵌套事件处理程序仍在启动;在jQuery中是否没有被触发?

Javascript 如果父事件为',为什么嵌套事件处理程序仍在启动;在jQuery中是否没有被触发?,javascript,jquery,Javascript,Jquery,在我的站点中,我有以下jQuery/JavaScript代码片段: $("span.testLink").mousedown(function (event) { if (event.which == 1) { event.stopPropagation(); $("span.testLink").mouseup(function (e) { if (e.which == 1) { var urlEn

在我的站点中,我有以下jQuery/JavaScript代码片段:

$("span.testLink").mousedown(function (event) {
    if (event.which == 1) {
        event.stopPropagation();
        $("span.testLink").mouseup(function (e) {
            if (e.which == 1) {
                var urlEncoded = encodeURI($(this).parent().find("input").val());
                window.open(urlEncoded);
            }
        });
        $(this).css("color", "#0b3773");
    }
});
很容易知道我期望在这里发生什么(尽管,很明显,我的期望在某个地方偏离了),但是为了完整性:有一个链接应该像它有一个简单的
。click()
事件处理程序一样工作(因为
mouseup()
嵌套在
mousedown()
中,或者我认为是这样)。显然,这不是工作方式,因为我可以单击并按住
span.testLink
元素外部的鼠标左键,将其拖回到
span.testLink
元素上,然后松开鼠标左键,
$(“span.testLink”).mouseup()
事件仍然激发

很明显,我不知道这个嵌套事件何时触发。我的问题是,我为什么要以不同的方式这样做

其他信息:


span.testLink
元素嵌套在
jQueryUI
可排序元素中。不确定这是否重要,但认为这绝对值得一提。如果这个问题的答案是“不,应该可以。检查你的插件”,那就很好了。如果确实是这样的话,我只需要确保我了解jQuery中嵌套的事件处理程序是如何工作的。每次调用
.mouseup()
,您都在为该元素添加另一个事件处理程序副本。除此之外,在另一个事件处理程序中设置事件处理程序没有任何特殊意义。重要的是DOM的结构。实际上没有“嵌套事件处理程序”这样的东西。您没有在那里嵌套事件处理程序。当有mousedown事件时,它将创建mouseup事件处理程序,并且在该事件之后它将始终工作。不简单地使用单击事件有什么原因吗?@Archer有(它在打开窗口后突出显示了一些文本/元素),但我刚刚找到了一种方法使简单的
.click()
工作。从这一点上,我知道我对事件处理程序的这种逻辑是错误的,所以我觉得在继续编写代码之前,我真的需要澄清这一点。@Pointy(还有你,Archer)谢谢你,先生(s)。现在我明白了,它就是不能那样工作(这也解释了为什么我在上面找不到任何东西)。如果你给我一个答案,我很乐意投赞成票并接受!