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

pat*_*ick 1 safari jquery-ui 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>
Run Code Online (Sandbox Code Playgroud)

和以下脚本:

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

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

function test() {
    $(this).text( "done" );
    return false;
}>
Run Code Online (Sandbox Code Playgroud)

单击链接会将文本更改为"完成",但拖动它也会将文本更改为"完成".但我不想在排序结束时单击链接.

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

我怎样才能防止这种情况发生?

编辑:我为此创建了一个jFiddle,所以你可以尝试一下.

Bak*_*urg 5

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

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

$(".url").click( function(){
    test();
});
Run Code Online (Sandbox Code Playgroud)

这有效!

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

最好的:

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

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

Uglier one和导致事件冒泡的问题:

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

$(".url").live('click', function() { $(this).text( "done" ); } );
Run Code Online (Sandbox Code Playgroud)

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