2009-02-25 36 views
0

我是JQuery的新手,所以这可能是一个非常愚蠢的问题。如何在JQuery中触发更改?

我已经使用JQuery来使表中的元素可拖动。我问了a question关于如何使它更快,而我迄今为止的最佳回应是禁用所有单元格的droppable,并且只在拖动某些内容时启用它们。

实际上,对我来说,这样做很有意义,因为我只希望能够将一个单元格拖到同一行中的另一个单元格上。所以我只需要将droppable应用到同一行的单元格中。所以,我这样做:

$(document).ready 
(
    function() 
    { 
    $('.draggable_div').draggable 
    (
     { 
     addClasses: false, 
     scroll: false, 
     axis: 'x', 
     start: function(event, ui) 
     { 
      $(this).css('background-color','#ddddff'); 
      var $cells = $(this).parent().parent().children(); 
      $cells.addClass("droppable_td"); 
     } 
     } 
    ); 

... 

萤火告诉我,我已经成功地添加了“draggable_td”类细胞中的右排。但是,如何让这种变化触发?我此刻设置代码的方式,可放开连接这样的:

$('.droppable_td').droppable 
    (
    { 
     addClasses: false, 
     over: function(event, ui) 
     { 
     $(this).css('background-color', '#ccffcc'); 
     }, 
     out: function(event, ui) 
     { 
     $(this).css('background-color', null); 
     }, 
     drop: function(event, ui) 
     { 

etc... 

我知道代码的工作,因为如果我把这个类在适当的< TD>在HTML元素所有的工作(非常缓慢)。

换句话说:如果我从一开始就把所有的细胞都放下了,它就会起作用。我怎样才能动态地改变一个单元格,使其可以因事件而丢弃?

回答

2

设置哪些单元格可拖放到您的可拖动的开始事件中。

start: function(event, ui) 
{ 
    $(this).css('background-color','#ddddff'); 
    var $cells = $(this).parent().parent().children(); 
    $cells.addClass("droppable_td"); 
    $cells.droppable({...}); 
} 
+0

D'oh!很简单。有效。谢谢! – Ben 2009-02-25 15:05:38

1

我认为这是当你叫投掷的(),您所做的细胞可放开,所以你需要在你的拖动处理程序函数调用可弃。

例如

start: function(event, ui) 
    { 
     $(this).css('background-color','#ddddff'); 
     var $cells = $(this).parent().parent().children(); 
     $cells.addClass("droppable_td"); 
     $('.droppable_td').droppable 
     (
     { 
      addClasses: false, 
      over: function(event, ui) 
     { 
      $(this).css('background-color', '#ccffcc'); 

我建议让所有进入功能虽然。