【问题标题】:How to prevent event propagation of a click on an accordion header?如何防止点击手风琴标题的事件传播?
【发布时间】:2011-06-10 17:49:43
【问题描述】:

我的 jquery 可排序插件有问题。确实,我有使用手风琴和可排序的项目(问题)。

我使用 sortable 的更新事件在每个问题手风琴中显示额外的内容。

但我的问题是,在对问题进行排序后,我移动的手风琴会自动打开。

这是一个重现问题的简单示例:http://jsfiddle.net/JwzH2/1/

尝试对问题进行排序,您会看到手风琴自动打开(有时它可能会正常工作,所以再试一次)。

有人知道如何解决它吗?

编辑:Fosco 给了我一个部分可行的解决方案,但仍然存在问题 => 它不适用于动态添加的元素(请参阅我的 cmets 关于他的回答)。

此外,看到代码在没有这一行的情况下仍然可以正常工作,我仍然感到惊讶: $('.hidden-content', question).show();。确实,有无这条线的事件传播应该是一样的

http://jsfiddle.net/JwzH2/38/

【问题讨论】:

  • 发生这种情况是因为为了排序,您必须单击...一旦您放开元素,手风琴的单击处理程序就会生效。对我来说每次都会发生...移动一个关闭的,它打开,移动一个打开的,它关闭。

标签: jquery jquery-ui jquery-ui-accordion jquery-ui-sortable


【解决方案1】:

我相信您的答案就在 jQuery UI 的示例代码中:http://jqueryui.com/demos/accordion/sortable.html

$(function() {
    var stop = false;
    $( "#accordion h3" ).click(function( event ) {
        if ( stop ) {
            event.stopImmediatePropagation();
            event.preventDefault();
            stop = false;
        }
    });
    $( "#accordion" )
        .accordion({
            header: "> div > h3"
        })
        .sortable({
            axis: "y",
            handle: "h3",
            stop: function() {
                stop = true;
            }
        });
});
</script> 

注意stop 变量的使用,以及排序机制和点击处理程序如何捕获和操作它。

编辑:今天早上我花了一些时间处理您的动态内容问题,这就是我想出的。添加新项目时,我销毁并重新设置手风琴和适当的点击处理程序。我将点击处理程序设置和手风琴设置移动到函数中,并在最初和添加新项目时调用它们。它发生得如此之快,以至于我看不到任何闪烁或视觉问题,但您的里程可能会有所不同。在这里试一试:http://jsfiddle.net/JwzH2/41/

【讨论】:

  • 谢谢 ;) 但是您知道为什么“实时”方法不起作用吗? $( "#accordion h3" ).live('click', function( event ) { if ( stop ) { event.stopImmediatePropagation(); event.preventDefault(); stop = false; } }); 确实,我必须动态添加元素,所以简单的 click() 方法不适用于 'post-dom-loaded' 元素
  • 我尝试过使用delegate 而不是live,但它不起作用:jsfiddle.net/JwzH2/37
  • 此外,还有一点我不明白。为什么当我简单地评论 $('.hidden-content', question).show(); 行时它可以完美运行?事件传播应该是一样的..
  • @Romain 我编辑了我的答案并发布了另一个小提琴,它可以满足你的要求。如果可以接受,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多