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,因此您可以尝试一下。
答案 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触发!