【发布时间】:2012-11-23 04:28:30
【问题描述】:
我刚刚意识到<a> 和<input> 标签存在不同的行为。
<div id="dialog">Your non-modal dialog</div>
<!--<a href="#" id="open">Open dialog</a>-->
<input id="open" value="Open dialog">
$('#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>标签事件没有冒泡?我错过了什么吗?
这里有一个fiddle 来演示。取消注释<a> 并注释<input>,然后单击它以查看差异。
从 this question 中 Jason 的回答中借用的代码。
【问题讨论】:
标签: jquery html events propagation