使jQuery UI可放置只接受一次可拖动

时间:2012-04-26 17:24:56

标签: jquery-ui jquery-ui-draggable jquery-ui-droppable

我看到这个问题上只有几个变种问了其他几个地方,特别是herehere

基本上,我有一个跳棋游戏板,棋盘上的每个方块都是可放置的,每个游戏都是可拖动的。每个方块一次只能有一个,我试图根据广场上是否有一块来切换启用/禁用方法。

以下是我到目前为止的链接:http://jsbin.com/ayalaz,以下是最相关的代码。

function handleDrop(e, ui) {
            var tileNumber = $(this).data('tile');
            // Make the gamepiece snap into the tile
            ui.draggable
                .data({ // WHAT IF PIECE IS SET BACK DOWN IN SAME TILE... CHECK FOR IT!
                    'preRow': ui.draggable.data('curRow'),
                    'preCol': ui.draggable.data('curCol'),
                    'curRow': $(this).data('row'),
                    'curCol': $(this).data('col')
                });
            $(this).append($(ui.draggable));
            ui.draggable
                .position({
                    of: $(this),
                    my: 'left top',
                    at: 'left top'
                });
            $(this).droppable('disable');
            //console.log("Gamepiece set down at: (" + $(this).data('row') + "," + $(this).data('col')+ ")");
        }

function handleOut(e, ui) {
            // HOW TO TOGGLE DROPPABLE??
            $(this).droppable('enable');
        }

有什么建议吗?

提前致谢! 杰里米

1 个答案:

答案 0 :(得分:2)

看起来您在第一次放置事件后成功禁用了tile上的droppable。您的问题是,您最初没有在初始的占用磁贴集上将droppable设置为disabled。

在您创建游戏板和棋子后,这应该可以实现,假设我的CSS选择器准确地反映了您的结构:

$('div.gamePiece').parent().droppable("option", "disabled", true);

请注意,这与在初始选项中更改droppability的语法不同。来自jQuery UI droppable documentation

//initialize
$( ".selector" ).droppable({ disabled: true });

//setter
$( ".selector" ).droppable( "option", "disabled", true );

修改

我认为$(this).droppable('disable');$(this).droppable('enable'); jquery-ui 具有启用和禁用的别名功能是错误的。

enable: function() {
    return this._setOption( "disabled", false );
},
disable: function() {
    return this._setOption( "disabled", true );
},