Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 激发下一个事件,但不要在那之后_Javascript_Jquery_Html_Javascript Events - Fatal编程技术网

Javascript 激发下一个事件,但不要在那之后

Javascript 激发下一个事件,但不要在那之后,javascript,jquery,html,javascript-events,Javascript,Jquery,Html,Javascript Events,对于一个页面,我得到了一个包装在标签内的链接,如下所示: <label for='checkbox_elem'> Links to <a href='somepage.php' target='anotherwindow'>another page.</a> </label> 你们中有谁能想出一种比手动复制元素的行为并终止事件更优雅的方法来实现这一点吗 顺便说一句,我一直在尝试停止播放,但没有太大成功 另外,请注意,上述解决方案确实有效

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

<label for='checkbox_elem'>
    Links to <a href='somepage.php' target='anotherwindow'>another page.</a>
</label>
你们中有谁能想出一种比手动复制元素的行为并终止事件更优雅的方法来实现这一点吗


顺便说一句,我一直在尝试停止播放,但没有太大成功

另外,请注意,上述解决方案确实有效,但我正在寻找一种更优雅的方法,用于一般性地阻止事件在第一次调用后传播。(第一个本机调用。如果我添加回调,我仍然希望激发本机元素行为,但不希望激发其父元素的行为)

谢谢,
Joe

您可以使用$(elem)。一(fn)--

也许您应该将html更改为:

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

并且完全不使用javascript?

如果允许您在客户端更改html,您可以像这样将链接移到标签之外

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

尝试阻止事件在标签上传播

$(document).ready(function(){
    $('label').click(function(e){
        e.stopPropagation();
    });
});
这个:

<label> test <a href="#">Test</a> <input type="checkbox" name="check[]" /></label>
对我有用。可能有smth干扰了您的脚本?

尝试使用
.one()
而不是
。单击()

接吻


我希望在每次单击时继续调用我的处理程序,但我需要它在触发normal元素事件后覆盖气泡。看起来one()不能改变我的问题。谢谢你的建议。不是我的HTML,它来自由非技术用户控制的CMS我试过这个。标签需要保留其正常的单击行为,除非事件来自元素。这会禁用标签行为。我想说FireFox没有做它应该做的事情。我试着在我能想到的每一个鼠标事件和元素组合上停止传播,但似乎没有什么能阻止firefox切换复选框。但是我注意到变更事件报告它的最终事件源是链接中文本节点上的点击事件。但不确定如何捕捉该事件…这与我发布的代码相同,但只防止用户第一次点击标签。很遗憾,one()函数不适合此用途。我可以使用window.open,但这是一个非常特定的重写,而且非常笨拙。我的问题的目的是看看这个问题是否有一个优雅的解决方案,而不是我已经拥有的黑客。OUPS,我没有得到一个“更优雅的方式”的部分:D,但是,你不能“如果你玩”代码>位置:绝对< /代码>与链接,但我认为这比这更丑陋。我实际上喜欢这种方法。(还有一些复杂的问题,但通常是可行的),但我不确定重写HTML来解决这些问题是否更优雅。老实说,我想不出任何其他方法…因为正如你所说,你无法控制HTML的源代码…这已经够优雅了。继续。。。
<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>
$('a').click(function(e){
    var t=$(this);
    window.open(t.attr('href'), t.attr('target'));
    return false;
});
$(document).ready(function(){
    $('label a').one(function(e){
        open($(this).attr('href'), $(this).attr('target'));
        return false;
    });
});
$(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;
    });
});