如何防止手风琴标题上的点击事件传播?

时间:2011-06-10 17:49:43

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

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

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

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

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

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

有人知道如何解决它吗?

编辑:Fosco给了我一个部分工作的解决方案,但仍然存在问题=>它不适用于动态添加的元素(请参阅我对其答案的评论)。

此外,我仍然惊讶地看到代码在没有这一行的情况下工作: $('.hidden-content', question).show(); 。实际上,无论有没有这条线,事件传播应该是相同的

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

1 个答案:

答案 0 :(得分:7)

我相信你的答案就在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/