gpt4 book ai didi

jquery - 如何避免在拖动具有可点击内容的 gridster.js 小部件后触发点击事件?

转载 作者:行者123 更新时间:2023-12-01 01:55:56 25 4
gpt4 key购买 nike

我正在使用 Gridster ( http://gridster.net/ ),它能够将内容拖动到 li 内。在我的 li 中有一个可点击的 div。

<li data-row="1" data-col="1" data-sizex="2" data-sizey="1">
<a href=' '>
<div>
content
</div>
</a>
</li>

所以这是我面临的问题,当我停止并释放拖动时,它将调用 div 中的单击,我怎样才能只拖动 div,而不是在拖动停止和释放后调用单击。我不希望它在拖动后重定向到另一个页面(用户拖动并释放..因为拖动时,它需要单击div,同时,div可以被单击,所以当停止并释放拖动时,它将调用单击)

$(function(){ //DOM Ready

var gridster = $(".gridster ul").gridster(
{
widget_margins: [5, 5],
widget_base_dimensions: [128, 130],
max_size_y: 2,
max_size_x: 2,
extra_cols: 6
}
).data('gridster');
//which i tried but failed
gridster.draggable.stop(){
onclick = "false";
}


// gridster.resize_widget($('.gridster li').eq(0), 1,1);

});

或者任何人都可以给出如何调用或使用gridster提供的功能的提示

draggable.stop: function(event, ui){} A callback for when dragging stops.

我想这里会有一些实现。

初步解决方案,但仍无法正常工作

    var gridster ,draggable ;
$(function () {
gridster = $(".gridster > ul").find("> li ").click(function(e){
!draggable && alert(1) //ipad2 ,not show alert
draggable=0;
alert(draggable);
}).end()
.gridster({widget_margins: [5, 5],
widget_base_dimensions: [128, 130],min_cols: 10,min_rows: 20
,serialize_params: function($w, wgd) {
return {
id: wgd.el[0].id
//,col: wgd.col
//,row: wgd.row
};
}
,draggable: {
start:function(event, ui){
// alert("hekio);");
draggable=1; }
}
}).data('gridster');
//gridster.disable();
// gridster.resize_widget($('.gridster li').eq(0), 1,1);
if(!dragged){
$("a#blue.grid").click(function(){
window.location = '../yokotachi/category_list.php?category=yokosmart';
});
}
// RESET DRAGGED SINCE CLICK EVENT IS FIRED AFTER drag stop
dragged = 0
});

最佳答案

问题在于,click 事件是在传递给 draggable.stop mouseup 事件之后触发的。 >.

因此,您需要短暂捕获该点击事件并停止其传播,然后在完成后取消捕获它,以便人们随后可以单击该项目。

您可以像这样执行此操作 ( click for working JSFiddle ):

$(document).ready(function () {
// Basic event handler to prevent event propagation and clicks
var preventClick = function (e) { e.stopPropagation(); e.preventDefault(); };
$(element).gridster({
draggable: {
start: function (event, ui) {
// Stop event from propagating down the tree on the capture phase
ui.$player[0].addEventListener('click', preventClick, true);
},
stop: function (event, ui) {
var player = ui.$player;
setTimeout(function () {
player[0].removeEventListener('click', preventClick, true);
});
}
}
});
})

这是一个比当前接受的答案更好的解决方案,因为它避免了在多个组件/处理程序之间设置/检查状态的变量。

关于jquery - 如何避免在拖动具有可点击内容的 gridster.js 小部件后触发点击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14301026/

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