我有一个允许对ul
li
进行排序的用户界面。为此,我使用jQuery-UI的sortable
。但是,默认情况下禁用排序,仅在单击按钮时激活。同时,我在每个li上都有一个click事件,它显示li在排序屏幕上表示的段落的预览。这很好,除非我正在积极排序,也会触发点击事件。
发生的事情是,每次我对li
进行排序时,我都会自动看到预览,我不想发生这种情况。我已采取以下措施来阻止它:仅当li
错过了班级no_preview
时才会触发点击事件。每当我开始排序时,该类都会添加到li
,并在排序完成时删除。
jQuery('ul.wiki_ul_layout_coloumns>li:not(.no_preview)').live('click', function() {
//show preview
})
jQuery('ul.wiki_ul_layout_coloumns').sortable({
connectWith: 'ul.wiki_ul_layout_coloumns',
start: function(event, ui) {
jQuery(ui.item).addClass('no_preview');
},
stop: function(event, ui) {
jQuery(ui.item).removeClass('no_preview');
}
});
测试这个新的解决方案,我看到我创建了一个竞争条件(因为两者都在一个密钥上做出反应)。现在,我可以通过向jQuery(ui.item).removeClass('no_preview')
添加一个计时器来解决这个问题,但我认为这个解决方案更像是一个黑客攻击。是否有正确的方法(或至少更好的方法)来解决这个问题?
我已更新代码以显示我使用多个互连的列表。到目前为止,我认为这与问题无关。
答案 0 :(得分:1)
似乎修复了有关连接列表的错误。在sortable下查看1.8.7的发行说明:jqueryui.com/docs/Changelog/1.8.7
如果你坚持使用1.8.6或更低版本,你可能会通过在stop事件处理程序中添加event.preventImmediatePropagation()来解决它。不确定,虽然我没有测试它,但它应该在理论上工作。