代码之家  ›  专栏  ›  技术社区  ›  Joe Mastey

启动下一个事件,但不是在那之后

  •  2
  • Joe Mastey  · 技术社区  · 14 年前

    对于一个页面,我得到了一个包装在标签中的链接,如下所示:

    <label for='checkbox_elem'>
        Links to <a href='somepage.php' target='anotherwindow'>another page.</a>
    </label>
    

    我想运行一些jQuery来允许链接弹出,但要在之后终止事件。我有以下几条,很管用,但不是很优雅:

    $(document).ready(function(){
        $('label a').click(function(e){
            open($(this).attr('href'), $(this).attr('target'));
            return false;
        });
    });
    


    作为旁白,我一直在尝试/ stopPropagation

    另外,请注意上述解决方案 有效果吗 ,但我在找东西 用于一般性地阻止事件通过其第一个调用传播(第一个本机呼叫。如果添加回调,我仍然希望激发本机元素行为,但不希望激发其父元素行为)。

    谢谢,

    7 回复  |  直到 14 年前
        1
  •  1
  •   Marnix van Valen    14 年前

    尝试阻止事件在标签处传播。

    $(document).ready(function(){
        $('label').click(function(e){
            e.stopPropagation();
        });
    });
    
        2
  •  0
  •   peol    14 年前
        3
  •  0
  •   Coffee Bite    14 年前

    也许你应该把你的html改成:

    <label for='checkbox_elem'>Links to </label>
    <a href='somepage.php' target='anotherwindow'>another page.</a>
    

    完全不用javascript?

        4
  •  0
  •   Ionuț Staicu    14 年前

    这个:

    <label> test <a href="#">Test</a> <input type="checkbox" name="check[]" /></label>
    

    <label for="test1"> test <a href="#">Test</a> <input type="checkbox" name="test1" id="test1" class="checkbox" /></label>
    

    和js:

    $('a').click(function(e){
        var t=$(this);
        window.open(t.attr('href'), t.attr('target'));
        return false;
    });
    

    对我有用。也许有smth干扰了你的剧本?

        5
  •  0
  •   Reigel Gallarde    14 年前

    如果允许你在客户端修改html,你可以像这样把链接移到标签外,

    $(document).ready(function(){ 
        $('label').find('a').each(function(){
            var $anchor = $(this);        
            $(this).closest('label').after($anchor);
        });
    });​
    

    demo

        6
  •  0
  •   Kristoffer Sall-Storgaard ProllyGeek    14 年前

    亲吻

    $(document).ready(function(){
        $('label a').click(function(e){
            open($(this).attr('href'), $(this).attr('target'));
            $(this).parent().click(); //Click the label again to reverse the effects of the first click.
            return false;
        });
    });
    
        7
  •  0
  •   JaÍ¢ck    12 年前

    .one() 而不是 .click() :

    $(document).ready(function(){
        $('label a').one(function(e){
            open($(this).attr('href'), $(this).attr('target'));
            return false;
        });
    });
    
    推荐文章