我有一个位于锚点中的按钮,该按钮具有一些由clicking
触发的逻辑。
问题是,每当我单击该按钮时,由于父元素anchor
,应用程序都会被重定向。
<a href="foo" id="bar">
<span id="button">click me</span>
</a>
我尝试使用.stopPropagation((,就像这篇文章中提到的那样,但它不起作用。
我试过了:
$('#button').on('click', function(e) {
e.stopPropagation();
})
这是小提琴。
但是,如果我用div
替换父anchor
,那么它可以工作 - JSFiddle
我做错了什么吗?
更新:我知道我可以用e.preventDefault()
阻止重定向,但是,我希望当我单击父元素进行重定向时,以及当我单击按钮不重定向并开始执行我的JS功能(打开模式(时。
试试这个:
$('#bar').on('click', function(e) {
if( $(e.target).is('#button') ) {
e.preventDefault();
//your logic for the button comes here
}
//Everything else within the ancho will cause redirection***
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="foo" id="bar">OK
<span id="button">click me</span>
</a>
尝试:
e.preventDefault();
小提琴:http://jsfiddle.net/hfyy10a8/3/
在链接上使用e.preventDefault();
:
$('#bar').on('click', function(e) {
e.preventDefault();
});
您也可以将其一起添加到您的示例中:
$('#button').on('click', function(e) {
e.stopPropagation();
e.preventDefault();
});
使用 return false
:
$('#button').on('click', function (e) {
//some logic
$(this).css('color', 'red');
return false;
});
stopPropagation 不起作用的原因是因为它会阻止事件处理程序运行,而不是本机行为。
尝试改用e.preventDefault()
:
$('#button').on('click', function (e) {
e.preventDefault();
});
请参阅此解释以了解e.stopPropagation()
不起作用的原因。
这个问题已经有了答案,但是,我通过returning false on the "onclick" attribute of the child element
让我的工作。
<a href="https://google.com">
<button onclick="return doTask()">Do not navigate</button>
</a>
function doTask(){
//... write action
return false; <- This prevents the click action from bubbling up to parent tag
}