我在使用 jquery 可排序时遇到了一些问题...
碰巧在排序后,触发了放置元素的单击事件,并且在此之上,拖动模式不会恢复,因此该元素保留了所有创建的行内样式(例如位置:绝对)通过插件!
我写了一个触发问题的类似情况:
html
<ul>
</ul>
<p class="add">add</p>
js:
$(document).ready( function() {
$("ul").sortable();
$('.add').click(function(){
var $li = $('<li>').appendTo( $('ul') )
var $a = $('<a>').attr('href','#').text('test' + ($('a').length + 1) ).appendTo($li)
$li.bind('click', function(){
activate($li)
return false
})
})
$(document).bind('click.outside', function(){
alert('click outside')
})
});
function activate($li){
$('a', $li).text('click');
}
activate() 将新元素添加到列表中并将单击处理程序绑定到它们。点击触发元素的“激活”。问题是即使在排序之后也会触发点击事件,而且我肯定不想要这个!
如果在添加函数之外使用 live() 将事件绑定到 $li,则不会出现问题:
$(document).ready( function() {
$("ul").sortable();
$('.add').click(function(){
var $li = $('<li>').appendTo( $('ul') )
var $a = $('<a>').attr('href','#').text('test' + ($('a').length + 1) ).appendTo($li)
return false;
})
$('li').live('click', function(){
activate($(this))
return false;
})
$(document).bind('click.outside', function(){
alert('click outside')
})
});
function activate($li){
$('a', $li).text('click');
}
但我不想这样做,因为我想将事件处理程序绑定到文档以捕获元素外部的点击,并且如您所知,live() 无法停止事件传播,即使返回 false。
任何想法?