我正在使用能够拖动li
内容的Gridster(http://gridster.net/)。在我的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){}拖动停止时的回调。
我想这里会有一些实现。
初始解决方案,但仍然无法正常工作
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
});
答案 0 :(得分:11)
问题是{<1}}事件在传递给click
的{{1}}事件后被解雇。
因此,您需要暂时捕获该点击事件并停止传播,然后在您完成后将其取消,以便人们随后点击该项目。
您可以这样做( click for working JSFiddle ):
mouseup
这是一个比当前接受的答案更好的解决方案,因为它避免了在多个组件/处理程序中设置/检查状态的变量。
答案 1 :(得分:5)
我用触发变量修复了它:var dragged = 0 将以下内容添加到gridster初始化中,该初始化在拖动开始时将变量设置为1:
...
draggable: {
start: function(event, ui) {
dragged = 1;
// DO SEOMETHING
}
}
....
在同一对象的点击事件中,请检查:
...
if(!dragged){
// DO SOMETHING
}
// RESET DRAGGED SINCE CLICK EVENT IS FIRED AFTER drag stop
dragged = 0
....
答案 2 :(得分:1)
你应该试试:
var gridster = $(".gridster ul").gridster().data('gridster');
gridster.disable();
答案 3 :(得分:0)
如果不深入研究JS,将onclick = "return false;"
添加到<a>
标记应停止点击触发。
要停止拖动,请尝试:
gridster.draggable.stop(){
return false;
}
或
gridster.draggable.stop(e){
e.preventDefault();
}
答案 4 :(得分:0)
现在支持在Gridster上禁用拖放操作。
$(".gridster ul").gridster().data('gridster').disable();