jquery拖放 - 恢复当前

时间:2012-04-05 15:52:18

标签: jquery-ui drag-and-drop

我有一个jquery UI拖放库存。它有效,但如果我的库存中已有20个商品(如果它已满),我希望它不会发生。

我在javascript / jquery上不是很好,我无法弄清楚如何修复我的代码来做到这一点。如果库存已满,我希望它恢复到原来的位置。

这是我用来拖放的功能

function itemInSpot(drag_item,spot) {

    // this is my count. i don't want it to drop an item if it's 20 or more.
    var inv_count = parseInt(<? echo count($inv_item) ?>, 10);

    var oldSpotItem = $(spot).find('img');  
    oldSpotItem.appendTo('#inventory').draggable({ revert: 'invalid' });

    var item = $('<img />');
    drag_item.empty().remove(); 
    item.attr('src',drag_item.attr('src')).attr('title',drag_item.attr('title')).attr('id',drag_item.attr('id')).attr('class',drag_item.attr('class')).appendTo(spot).draggable({ revert: 'invalid' }); 

    }

这是运行该功能的代码,在pageload上设置:

$(document).ready(function() {
    $(".weapons,.shield").draggable({ stack: "div", revert: 'invalid'});
    $('#inventory').droppable();
    $("#weapon_spot").droppable({ accept: '.weapons'})
    $('#shield_spot').droppable({ accept: '.shield'});

    $('#weapon_spot,#shield_spot,#inventory').bind('drop', function(ev,ui) { itemInSpot(ui.draggable,this); });
    });

那么如何添加if inv_count > 19 then revert item back to it's original position

1 个答案:

答案 0 :(得分:2)

这是一个基本的 jsFiddle example ,它有六个可拖动/可放置的项目,在第三个项目被放置在目标上之后,会触发警报,并且不允许其他可拖动项放置在可放置的项目中区域。如果尝试掉落,则元素保留可拖动属性并恢复到其原始位置。

jQuery的:

$(".ui-widget-content").draggable({
    revert: "invalid"
});
$("#droppable").droppable({
    drop: function(event, ui) {
        $(this).addClass("ui-state-highlight").find("p").html("Dropped!");
        $(ui.draggable).addClass('in');
        if ($('.in').length == 3) {
            $("#droppable").droppable("option", "accept", ".in");
            alert('Full!');
        }
    }
});