2010-10-05 97 views
0

我有一個問題附加列表項從一個ul到另一個。當每個列表項被點擊時,它應該被附加到另一個ul中。但是,一旦這些項目被追加,他們將繼續追加到他們當前的ul中......意味着他們將自己排序到列表的底部。例如:問題與jQuery appendTo()

<ul class="first-holder"> 
      <li><input type="checkbox" name="location1" /> Location 1</li> 
      <li><input type="checkbox" name="location2" /> Location 2</li> 
      <li><input type="checkbox" name="location3" /> Location 3</li> 
      <li><input type="checkbox" name="location4" /> Location 4</li> 
      <li><input type="checkbox" name="location5" /> Location 5</li> 


      </ul> 


      <div class="more-options first-option"> 
      <ul> 
      <li><input type="checkbox" name="location-6" checked="checked" /> Location 6</li> 
      <li><input type="checkbox" name="location7" checked="checked" /> Location 7</li> 
      <li><input type="checkbox" name="location8" checked="checked" /> Location 8</li> 
      </ul> 
      </div> 

jQuery的:

$('div.more-options li').click(function() { 

       $(this).appendTo($('ul.first-holder')); 
       return false; 

      }); 

什麼情況是這樣的:在div.more選項的列表項將追加到ul.first保持者,但是當這些項目在ul.first-holder中,點擊它們會使它們追加到ul.first-holder的末尾。一旦李氏被附加到ul.first-holder後,他們就不應該移動到任何地方。我無法弄清楚如何做到這一點。

回答

0

嘗試從項目中刪除事件處理程序。它會停止接收點擊事件。

$(this).unbind('click'); 
$(this).appendTo($('ul.first-holder')); 

http://api.jquery.com/unbind/

+0

沒錯,這做到了。謝謝。 – johnnyb 2010-10-05 18:05:34

0

那是因爲你正在與它相連的單擊事件的節點。所以當該節點被追加到其他ul時,click事件仍然適用。

您可以複製節點並追加該節點,或者在追加時刪除單擊事件。

0

使用.delegate()這裏,而不是像這樣:

$('div.more-options').delegate('li', 'click', function() { 
    $('ul.first-holder').append(this); 
}); 

You can test it out here

目前您click處理程序是在<li>元素,並與他們感動......而不是把click處理器上.more-options<div>本身,所以沒有處理移動。這也是便宜的要執行,如果你有以上幾個要素:)

0

你想只處理第一click事件,這樣更多:

$('div.more-options li').one('click', function() { ... }):