在将元素拖到其上时,中间列应更改宽度。它确实有效,直到我点击替换按钮取代中间列的html。然后事件停止被触发。据我所知.on()
应该能够处理这类案件,还是我错了?
这是一个简单的演示,演示了这个问题:https://jsfiddle.net/shuetvyj/3/
HTML:
<div class="members-column">
<div class="sort"> 1 </div>
<div class="sort"> 1 </div>
</div>
<div id="groupB" class="members-column">
</div>
<div class="members-column">
<div class="sort"> 2 </div>
</div>
<a href="" id="replace">replace groupB</a>
使用Javascript:
$(".members-column").sortable({
items: ".sort",
connectWith: ".members-column"
});
$("#groupB").on("sortover", function() {
console.log('overB');
$('#groupB').css('min-width','80px');
});
$("#groupB").on("sortout", function() {
console.log('outB');
$('#groupB').css('min-width','');
});
$("#replace").on("click", function(e) {
e.preventDefault();
$("#groupB").replaceWith('<div id="groupB" class="members-column"></div>');
});
答案 0 :(得分:2)
而是使用replaceWith
使用.html
,如下所示
$("#replace").on("click", function(e) {
e.preventDefault();
$("#groupB").html("");
});
https://jsfiddle.net/shuetvyj/5/
使用replaceWith
$('body').on('sortover', '.members-column', function() {
$('#groupB').css('min-width','80px');
});
$('body').on('sortout', '.members-column', function() {
$('#groupB').css('min-width','');
});
$("#replace").on("click", function(e) {
e.preventDefault();
$("#groupB").replaceWith('<div id="groupB" class="members-column"></div>');
$(".members-column").sortable({ items: ".sort",connectWith: ".members-column" });;
});
答案 1 :(得分:1)
当您替换html时,您附加到旧html的侦听器不会重新附加到新的html。
结果,您的处理程序将不再被调用。 要解决此问题,只需在更换后将侦听器附加到新的html。
(jQuery使用live
代替on
解决了一段时间,这会在dom更改后自动附加侦听器)http://api.jquery.com/live/
但{j} 1.7之后已将live()
弃用,并已在1.9
另外,删除列可能也会破坏sortable
的行为(因为它不会存储选择器,而是首次调用时选择器的结果,因此保留对div的引用你从DOM中删除了。
总之;一旦有sortable
收听,只要清除或替换其内容