7

我在一个带有“元素”类的 div 中有一个锚点。

<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();
    }
});

但我的问题是确认事件一次又一次地触发。我认为这是因为均匀传播。经过研究,我发现我可以e.stopPropagation()这篇文章中使用。但我无法弄清楚如何在这里使用它。

编辑 消息“您要注销吗?” 在确认框中是从数据库中动态获取的,所以我不能在代码中对其进行硬编码。

4

4 回答 4

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';
        }
    }
});

测试小提琴:http: //jsfiddle.net/e52QN/1/

于 2013-03-18T08:23:49.707 回答
1

这是基于我认为你想要的一些假设。从评论和问题中,我了解到如果外部 div 没有注销类,则应该将用户发送到“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-tag 作为链接。除了将事件传播到外部元素之外,什么也没有发生(如果点击实际上是在链接上,我们仍然希望让 `div-tag 处理它)。JavaScript 的第二部分首先检查是否存在注销类并相应地设置 href。最后,如果用户被发送到“logout.jsp”,将显示确认框并测试返回值。

于 2013-03-18T09:02:28.013 回答
0

尝试

onclick="return confirm('Do you want to logout?');window.event.cancelBubble = true;"

或者

onclick="javascript:event.stopPropagation();return confirm('Do you want to logout?');"
于 2013-03-18T08:09:57.773 回答
0

您可以使用:

$('.subTop a').on('click', function (e) {
  e.stopPropagation();
});

不过我同意@ink.robot,你的代码应该结构更好,以避免这种情况。

于 2013-03-18T08:19:53.833 回答