Jquery在达到3个元素的限制后禁用droppable

时间:2016-02-10 08:59:16

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

我有两个拖放列表框我希望我的第二个列表框只允许第一个列表框中的3个列表项。我的问题是,当我达到极限时它会使计数器工作但我得到这个错误:

  

未捕获错误:无法在draggable之前调用方法   初始化;试图调用方法'禁用'

它允许它拖动3个以上的元素。我希望它停止在3个元素,当我从第二个列表框中拖出时,它减去了计数器。

var counter = 0;

$("#listbox2").droppable({
    drop: function(event, ui) {
        if (counter <= 3) {
            counter++;
            $('#counter_text').text(counter);
        }
        if (counter === 3) {
            $('#listbox2').droppable("disable");
            $('#listbox1 li').draggable("disable");
        }
    }
})

$("#listbox1").droppable({
    drop: function(event, ui) {
        counter--;
        $('#counter_text').text(counter);

    }
})

3 个答案:

答案 0 :(得分:2)

Yu只需要初始化可拖动元素。这是一个工作样本(具有可怕的样式,BTW)

&#13;
&#13;
var counter = 0;
$('#counter_text').text(counter);    

$('#listbox1 li').draggable({
  stop: function(event, ui) {
    $(this).css('left',0);
    $(this).css('top',0);
  }
});

$("#listbox2").droppable({
  drop: function(event, ui) {
    $(this).append(ui.draggable);
    if (counter <= 3) {
      counter++;
      $('#counter_text').text(counter);
    }
    if (counter === 3) {
      $('#listbox2').droppable("disable");
      $('#listbox1 li').draggable("disable");
    }
  },
  hoverClass: 'hover'
});

$("#listbox1").droppable({
  drop: function(event, ui) {
    counter--;
    if (counter<3) {
      $("li").draggable("enable");  
      $('#listbox2').droppable("enable");
    }
    $('#counter_text').text(counter);    
    $(this).append(ui.draggable);
    $(ui.draggable).draggable('enable');
  },
  hoverClass: 'hover'
});
&#13;
ul {
  border: solid 1px green;
  padding: 5px;
  height: 120px;
}

.hover {
  background-color: #CFC;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.js"></script>

<div id="counter_text"></div>

<ul id="listbox1">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
</ul>

<ul id="listbox2">
</ul>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

检查你的程序的执行流程:确保你在尝试对它执行任何操作之前确实已经初始化了插件(例如:调用$('#listbox1 li').draggable();)。

答案 2 :(得分:0)

如果您执行以下操作,请执行以下操作:

 $('#list1').droppable("disable");
 $('#list2 li').draggable("disable");

你会得到:

未捕获错误:无法在初始化之前调用draggable上的方法;试图调用方法&#39;禁用&#39;

我建议你在这样做的时候做同样的事情:

if ($('#list1 li').length >= 3) {
        window.setTimeout(function() {
          $('#list1').droppable("disable");
          $('#list2 li').draggable("disable");
        }, 100)
        return false;
      }

工作示例here