gpt4 book ai didi

jquery-ui - 在拖放面板中限制最大元素

转载 作者:行者123 更新时间:2023-12-01 07:16:07 26 4
gpt4 key购买 nike

我的网站上有一个可排序的面板(jQuery UI),但需要将每列中的元素数量限制为最多 12 个。

我已经尝试了一些东西,但似乎无法让它工作。我需要查看“i”是否为 12 或更大,如果是,请不要更新,但我似乎做不到!

有人有任何建议或可以以正确的方式插入我吗?

jQuery在下面!

function updateWidgetData(){
var items=[];
$('.column').each(function(){
var columnId=$(this).attr('id');
$('.dragbox', this).each(function(i){
var collapsed=0;
if($(this).find('.dragbox-content').css('display')=="none")
collapsed=1;
var item={
id: $(this).attr('ID'),
collapsed: collapsed,
order : i,
column: columnId
};
items.push(item);
});
});
var sortorder={ items: items };

//Pass sortorder variable to server using ajax to save state

$.post('includes/updatePanels.php', 'data='+$.toJSON(sortorder), function(response){
if(response=="success")
$("#console").html('<div class="success">Your preferences have been saved</div>').hide().fadeIn(1000);
setTimeout(function(){
$('#console').fadeOut(1000);
}, 2000);
});
}

最佳答案

可排序的

对于连接的 sortable,解决方案是在拖动开始时计算每个 sortable 中的元素,并禁用具有最大允许元素数的元素。我们需要排除当前的可排序对象,因此我们可以重新排序其中的项目并允许拖动当前元素。

这里的问题是,如果我们对任何可排序的事件执行上述操作,已经为时已晚,禁用它们不会有任何效果。解决方案是将检查绑定(bind)到 鼠标按下 项目本身的事件,它将在可排序对象获得任何控制之前触发。我们还需要在拖动停止时重新启用所有可排序。

看看这个例子,使用 <ul>可分类 <li>项,每个可排序的最大项数为 3​​:http://jsfiddle.net/qqqm6/10/

$('.sort').sortable({
revert: 'invalid',
connectWith: '.sort',
stop: function(){
// Enable all sortables
$('.sort').each(function(){
$(this).sortable('enable');
});
}
});

$('.sort li').mousedown(function(){
// Check number of elements already in each sortable
$('.sort').not($(this).parent()).each(function(){
var $this = $(this);

if($this.find('li').length >= 3){
$this.sortable('disable');
} else {
$this.sortable('enable');
}
});
})

Draggables和droppables

原理很简单,解决方法有点棘手,jQuery UI 中确实应该有一个适当的选项来取消 drop 操作。如果有,但我错过了什么,请告诉我。

无论如何,以下是您在 drop 事件中检查最大计数的方法(本例中最多 4 个):
$('.drag').draggable({
revert: 'invalid',
stop: function(){
// Make it properly draggable again in case it was cancelled
$(this).draggable('option','revert','invalid');
}
});

$('.drop').droppable({
drop: function(event,ui){
var $this = $(this);

// Check number of elements already in
if($this.find('.drag').length >= 4){
// Cancel drag operation (make it always revert)
ui.draggable.draggable('option','revert',true);
return;
}

// Put dragged item into container
ui.draggable.appendTo($this).css({
top: '0px',
left: '0px'
});

// Do whatever you want with ui.draggable, which is a valid dropped object
}
});

看看这个 fiddle 的实际效果: http://jsfiddle.net/qqqm6/

关于jquery-ui - 在拖放面板中限制最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com