2012-03-03 30 views
11

我使用JQuery提交表單。形式看起來像下面使用JQuery獲取TextArea

<form class="ask-more-form"> 
<div class="product_info_2"> 
<textarea name="product_question" class="textbox" placeholder="Ask You Question Here"></textarea> 
</div> 
<input type="hidden" name="product_id" value="1" id="product_id"> 
<a href="#" class="whiteButton submit" id="ask-more-submit-button">Ask Question</a> 
</form> 

而jQuery來捕捉形式如下:

$('#ask-more').on('submit', '.ask-more-form', function() { 
     var product_id = $(this).children('input[name=product_id]').val(); 
     var product_question = $(this).children('textarea[name="product_question"]').text(); 

alert(product_question); 
//submitQuestion(product_id, product_question); 

       }); 

的PRODUCT_ID總是被讀出,但該產品的問題是總是空。誰能告訴我爲什麼會發生這種情況?

回答

16

.childrenonly goes one level down。改爲使用.find

$('#ask-more').on('submit', '.ask-more-form', function() { 
    var product_id = $(this).children('input[name=product_id]').val(); 
    var product_question = $(this).find('textarea[name="product_question"]').text(); 
    alert(product_question); 
    //submitQuestion(product_id, product_question); 
}); 
+0

是使用val()和find的組合 – 2012-03-03 17:30:53

+0

個人而言,我會使用'.val()',但'.text()'將用於'textarea'。請參閱http://jsfiddle.net/kfD7b/進行演示。 – pete 2012-03-03 17:33:04

4

您使用一個<textarea>text()時,你應該使用val()

var product_question = $(this).children('textarea[name="product_question"]').val(); 

這是其他輸入元素類型,如<select>真實<input>

+1

應該注意的是,所有爲輸入設計的元素,例如'input','textarea'和'select'都應該使用val()來訪問。這是讓jQuery棒極了的事情之一。 – bdares 2012-03-03 17:29:27

+0

@bdares好點,加 – JaredPar 2012-03-03 17:30:35

0

Use .val() instead of .text()。它會伎倆

+0

也許可以像[這裏](http://stackoverflow.com/a/807908/1183294)解釋'.val()'和'.text()'之間的區別。 – sinemetu1 2012-03-04 06:14:43

+0

是的.val()爲input元素工作,.text沒有 – 2012-03-04 14:36:19

0

你不需要使用childrenfind。既然你已經擁有你可以使用你的基地,只需使用一個標準的jQuery選擇像這樣形式的id:加入你告訴一個seocnd參數

var product_question = $('textarea[name="product_question"]', this).val(); 

的jQuery只使用this作爲DOM樹。