1

我有一个用于库存的 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' }); 

    }

这是运行该函数的代码,在页面加载时设置:

$(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 positionin呢?

4

1 回答 1

2

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

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!');
        }
    }
});
于 2012-04-05T16:19:51.290 回答