首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输入的事件冒泡与标记的不同行为?

输入的事件冒泡与标记的不同行为?
EN

Stack Overflow用户
提问于 2012-12-05 18:57:35
回答 2查看 114关注 0票数 1

我刚刚意识到<a><input>标签存在不同的行为。

代码语言:javascript
复制
<div id="dialog">Your non-modal dialog</div>

<!--<a href="#" id="open">Open dialog</a>-->
<input id="open" value="Open dialog">
代码语言:javascript
复制
$('#open').click(function() {
    $('#dialog').dialog('open');
});

$('#dialog').dialog({
    autoOpen: false,
    modal: false
});

// Close Pop-in If the user clicks anywhere else on the page
jQuery('html') //set for html for jsfiddle, but should be 'body'
    .bind('click', function(e){
        if (jQuery('#dialog').dialog('isOpen')
            && !jQuery(e.target).is('.ui-dialog, a')
            && !jQuery(e.target).closest('.ui-dialog').length)
        {
            jQuery('#dialog').dialog('close');
            alert("close_dialog");
        }
    }
);

如果使用<a>,则不会将单击事件传播到文档。如果使用<input>,单击事件被冒泡到文档中,单击输入直接关闭对话框。我知道这可以用stopPropagation来处理。问题是为什么<a> tags事件没有冒泡出来?我是不是漏掉了什么?

这是一个演示的fiddle。取消注释<a>并注释<input>,然后单击它以查看差异。

代码借用自this question中Jason的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-05 19:08:50

问题出在下面这一行:

代码语言:javascript
复制
&& !jQuery(e.target).is('.ui-dialog, a')

您正在询问jQuery事件目标是"a“标记还是具有".ui-dialog”类的元素。删除选择器中的"a“标记,如下所示,它应该按您所希望的那样工作。

代码语言:javascript
复制
&& !jQuery(e.target).is('.ui-dialog')

以下是修改后的fiddle http://jsfiddle.net/PRQNY/1/

附言:只是为了确认你对事件的理解。无论标准DOM事件模型中的元素标记如何,所有事件都会冒泡。

票数 1
EN

Stack Overflow用户

发布于 2012-12-05 19:12:37

这一行导致if语句为false,因此您看不到if语句中的alert。

代码语言:javascript
复制
&& !jQuery(e.target).is('.ui-dialog, a')

事件目标是a,因为您在事件已经冒泡的情况下也单击了它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13721667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档