2012-03-03 46 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树。