在排序可排序的jQuery UI之后单击触发

时间:2011-05-18 00:24:41

标签: jquery-ui safari click jquery-ui-sortable

Safari上出现此问题。我没有在IE上遇到问题(这是第一个),但也许有人能够帮助我:

我有一个可排序的:

<ul id='srt'>
    <li><a class='url' href='http://www.test.com'>test</a></li>
    <li><a class='url' href='http://www.test1com'>test1</a></li>
    <li><a class='url' href='http://www.test2com'>test2</a></li>
</ul>

以及以下脚本:

$(document).ready( function() {
    $("#srt").sortable();

    $(".url").click( test );
});

function test() {
    $(this).text( "done" );
    return false;
}>

单击链接会将文本更改为“已完成”,但拖动文本也会将文本更改为“已完成”。但我不想在排序结束时单击链接。

就像我说的:IE正在运行它应该运行的功能,它对链接进行排序并且不会触发绑定的单击功能,但是Safari会触发点击...

如何防止这种情况发生?

编辑:我为此创建了jFiddle,因此您可以尝试一下。

1 个答案:

答案 0 :(得分:5)

实际上我在当前的项目中遇到了同样的问题,而且我真的没有线索,因为一开始工作正常,但是在代码发生一些变化之后就停止工作了。问题是我做了很多改变,我无法想象是什么造成了问题

在你的情况下,Hwr更幸运。你永远不应该在jquery中传递这样的事件处理程序。使用以下语法:

$(".url").click( function(){
    test();
});

这有效!

编辑: 道歉,它在排序时仍会触发处理程序。两个是解决方案!

最好的一个:

$("#srt").sortable({ helper: 'clone' });
$(".url").click( function() { $(this).text( "done" ); } );

使用帮助器:'clone'选项避免插件在元素上运行处理程序。 (注意我将test()主体包含在匿名函数中,否则你将无法使用“this”)

Uglier one,导致事件冒泡问题:

$("#srt").sortable();

$(".url").live('click', function() { $(this).text( "done" ); } );

这只是出于教学原因!由于live()事件不在元素本身中,因此它们不会被sortable触发!