3

我正在創建一個界面,允許用戶將&拖放預設響應放入「回覆」<textarea>。我決定使用jQuery UI。jQuery UI拖放問題 - 輸入後不允許放入textarea

問題:<textarea>輸入後,.droppable()功能壞了。

我可以在裏面<textarea>單擊,然後刪除文本,但打字後,我不能刪除任何文本放入<textarea> ...

的jQuery:

$(document).ready(function(){ 

    $(init); 

    // Initialization 
    function init(){ 
     // Draggable 
     $(".response").draggable({ 
      helper : "clone", 
      cursor : "move" 
     }); 

     // Droppable 
     $(".survey-reply textarea").droppable({ 
      accept : ".response", 
      drop : dropResponse 
     }); 
    } 

    // When Dropped 
    function dropResponse(event,ui) { 

     var draggable = ui.draggable; 

     // Get existing text 
     var text = $(this).text(); 

     // If field is empty then just apply the dragged response 
     if (text == "") { 
      $(this).text(draggable.children(".saved-response").val()).appendTo(this); 
     } 
     // If not, then add the dragged response to the present text 
     else { 
      $(this).text(text + ' ' + draggable.children(".saved-response").val()).appendTo(this); 
     } 

    } 

}); 

這完成我所需要的(幾乎)。它允許我將<li>響應拖入<textarea>。它還編譯文本而不是替換<textarea>中的文本。

它不會做什麼:我需要的用戶能夠在<textarea>輸入,然後拖動響應到<textarea>,此時預設響應被添加到輸入文字。

目前,我可以在<textarea>之內單擊,並在焦點位置拖動響應。但由於某些原因,打字在<textarea>禁止投擲的事件...

如果有人可以幫助我弄清楚如何鍵入的文本區域,然後拖動反應到同一個文本區域,我會很棒!

注:我不包括HTML,但我向你保證,在選擇是正確的。我確實有佔位符屬性應用於<textarea>。我不相信這與問題有任何關係(因爲拖放文本消除了顯示的佔位符文字...

回答

4

問題是您使用text()函數來獲取/設置textarea值,你真的想要的是val()。另外,我不認爲你想要更新textarea值的.appendTo(this)調用,你不需要將你的調用打包到$(),你可以做init();。兩行,它應該工作:

更改此:

var text = $(this).text(); 

var text = $(this).val(); 

並改變這一點:

$(this).text(text + ' ' + draggable.children(".saved-response").val()).appendTo(this); 

這樣:

$(this).val(text + ' ' + draggable.children(".saved-response").val()); 
+1

感謝的人!我試過了。val()在'var text'之前,但是我需要應用它。而我從jQuery UI文檔直接獲得的其他代碼......但是,我的應用程序並不需要.appendTo()。非常感謝! @clav – derekmx271

+0

@ derekmx271:正好!今天幫助了我 –