0

我正在使用 jquery-ui 实​​现一个网站,以便能够对列表进行排序。

jQuery(".folder ul").sortable( { 
    opacity: 0.6, 
    cursor: 'move',
    update: sortUpdate,
    distance: 15,
    items: "> li:has(a)",
} );

列表元素只有在它包含一个元素时才应该是可排序的。到目前为止,一切都很好。

由于可排序项目包含一个链接,因此当我删除可排序项目时,会调用该链接(我认为是因为它是作为 onclick 事件处理的?)。我尝试创建一个新的 onclick 处理程序来自己处理单击事件,检查用户当前是否正在拖动。然而,这不起作用。

jQuery('.folder-used').click(function(event) {
    event.stopPropagation();
event.preventDefault();
});

当我在我自己的点击处理程序中放置一个断点时,它表明点击时到达了代码。但是该页面无论如何都会进行重定向。我的猜测是因为我必须使用 tomahawk commandlink。Tomahawk 生成自己的 javascript 函数来处理提交操作。

<t:commandLink action="#{dataHandler.filterChanged}">
<f:param name="id" value="#{val}" />
<img:generateTextImage height="182" width="50" value="#{val}" verticalAligned="true" xpos="54" ypos="29" />
</t:commandLink>

我该如何解决这个问题?有谁知道我如何处理 tomahawk 的 onclick 事件?

提前谢谢!泽德

Ps 我尝试过不同的方法,例如此处(可排序的开始和停止事件)或此处(禁用链接的点击事件)

4

1 回答 1

0

我找到了我的问题的答案。

我持有一个变量,说明我当前是否正在拖动

jQuery(".folder ul").sortable( { 
    opacity: 0.6, 
    cursor: 'move',
    update: sortUpdate,
    distance: 15,
    items: "> li:has(a)",
    start: function(event, ui) {
       dragging = true;     
    }
} );

在 commandLink onclick 事件中,我检查是否在拖动。如果是这样,我将dragging变量重置为 false 并返回 false,因此不会调用 tomahawk 动作。

<t:commandLink onclick="if(dragging) { dragging = false; return false; }" action="#{handler.filterChanged}">

tomahawk 将把我的onclick代码放在它自己的前面。使用return false;我确保在这种情况下忽略战斧代码。

于 2012-10-11T13:51:42.833 回答