我在div中有一个带有“element”类的锚。
<div class="element logout">
<div class="subTop">
<a href="home.jsp" onclick="return confirm('Do you want to logout?');">Log Out</a>
</div>
</div>
我使用以下代码来处理注销。
jQuery(".element").click(function(e){
var tmpHref=jQuery(this).not('.logout').find(".subTop>a").attr('href');
if(tmpHref!=undefined&&tmpHref!=""&&tmpHref!=null)
{
window.location.href=tmpHref;
}
else
{
jQuery(this).find(".subTop>a").click();
}
});
但我的问题是确认事件一次又一次地触发。我认为这是因为传播均匀。在我的研究之后,我发现我可以使用this帖子中的e.stopPropagation()
。但我无法弄清楚如何在这里使用它。
修改 消息“您要退出吗?”在确认框中是从数据库中动态获取的,因此我无法在代码中对其进行硬编码。
答案 0 :(得分:2)
试试这个:
<强> HTML:强>
<div class="element logout">
<div class="subTop">
<a href="home.jsp" class="testa" >Log Out</a>
</div>
</div>
<强> jQuery的:强>
jQuery(".element").click(function(e){
e.preventDefault();
if( confirm('Do you want to logout?'))
{
//console.log(jQuery(this).parents('.element'));return;
if(jQuery(this).hasClass('logout'))
{
window.location.href='logout.jsp';
}
else
{
window.location.href='home.jsp';
}
}
});
答案 1 :(得分:1)
这是基于我认为你想要的一些假设。从评论和问题我明白,如果外部div doe snot具有logout类,则应该将用户发送到'home.jsp',如果有,则发送到'logout.jsp'。如果这是正确的,你可以将html改为
<div class="element logout">
<div class="subTop">
<a href="home.jsp" data-confirmmsg="Do you want to logout?" >Log Out</a>
</div>
</div>
和JavaScript
jQuery(".subTop>a").click(function(e){
e.preventDefault();
});
jQuery(".element").click(function(e){
var self = jQuery(this),
isLogout = self.hasClass('logout')
anchor = self.find(".subTop>a")
href = isLogout ? "logout.jsp" : anchor.attr('href');
if(!isLogout || (isLogout && confirm(anchor.data('confirmmsg'))))
{
window.location.href=href;
}
});
Javascript的第一部分只是禁用a
- 标记作为链接。除了将事件传播到外部元素之外没有任何事情发生(如果点击确实在链接上,我们仍然想让`div-tag处理它)。 JavaScript的第二部分首先检查注销类是否存在,并相应地设置href。最后,如果用户被发送到'logout.jsp',将显示确认框并测试返回值。
答案 2 :(得分:0)
尝试
onclick="return confirm('Do you want to logout?');window.event.cancelBubble = true;"
或强>
onclick="javascript:event.stopPropagation();return confirm('Do you want to logout?');"
答案 3 :(得分:0)
您可以使用:
$('.subTop a').on('click', function (e) {
e.stopPropagation();
});
我同意@ ink.robot,你的代码应该更好地构建,以避免这种情况。