2014-02-06 84 views
0

我正在建立一個網站,我在其中使用標籤顯示不同的聊天。每個標籤我有一個動態創建的textarea,用戶可以在其中鍵入他的消息並點擊發送按鈕。當我打開第一個標籤時,插入文本並點擊發送按鈕可以正常工作。但是,當我打開第二個選項卡時,似乎無法再加載textarea中的文本。如何獲取第二個創建的textarea的值?

功能與創建新的標籤是這樣的:

function addTab(user_id, name) { 
    $('#pageTab').append(
     $('<li><a href="#' + user_id + '">' + user_id + name + 
      '<button class="close" type="button">×</button></a></li>')); 
    $('#pageTabContent').append($('<div class="tab-pane" id="' + user_id 
     +'"><form id="send_message_form"><textarea id="messageText" rows="3" cols="35"></textarea></br>' 
     + '<input type="button" id="sendButton" value="Send Message"></form>' 
     + '<div class="conversation"></div></div>')); 
    $('#page' + user_id).tab('show'); 
} 

,並用下面的代碼我嘗試讀取textarea的價值。

$(".response_wrapper").on("click", "#sendButton", function() { 
    var text = $("#messageText").val(); // Get the text 
    alert("thetext: " + text); 
}); 

有誰知道爲什麼它可以在第二個中首先創建的選項卡獲得textarea的價值,但不是?最重要的是我該如何解決這個問題?

歡迎任何提示!

+0

你調試過'$(「#messageText」)'的值嗎?如果該元素被插入到DOM中,然後該選擇器運行,它應該可以工作。 – helion3

+5

元素ID應該是唯一的。如果您沒有唯一的ID,嘗試將ID用作選擇器時會看到很多問題。 – Bic

+0

@Bic是對的,它只會讀取一個ID如果有倍數。給他們相同的班級,並通過班級指數來獲得他們。 – VIDesignz

回答

1

您的問題可能是由於生成多個文本區和按鈕具有相同的id屬性。 id屬性對於所有Web元素都是唯一的。我建議進行一些修改,以便您的元素具有唯一的id,並附加到您生成的每個textarea。如果你不想重視,當你創建它們每一個元素,你也許可以嘗試這樣的:

$(".response_wrapper").on("click", "button", function() { 
    var text = $(this).prev('textarea').val(); // Get the text 
    alert("thetext: " + text); 
}); 

上面的代碼附加到按鈕一般,而不是與特定ID的按鈕。這應該有效,儘管它可能導致頁面上每個按鈕的執行;你最好的選擇是每次創建和附加一個新元素時附加。注意:如果你確實選擇了這個代碼,你仍然應該考慮在你的元素上使用唯一的ID。或者,使用此代碼,您不需要IDS。

+0

感謝您的回答。最後,我認爲正確的做法是簡單地使用唯一的ID。所以現在一切都運轉良好。謝謝你的回答! – kramer65

相關問題