2012-03-03 46 views
11

Tôi đang gửi biểu mẫu bằng cách sử dụng JQuery. Các hình thức trông giống như dưới đâyBắt TextArea Sử dụng JQuery

<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> 

Và JQuery để bắt các hình thức trông như thế này:

$('#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); 

       }); 

các product_id luôn đọc nhưng câu hỏi sản phẩm phải lúc nào cũng là null. Bất cứ ai có thể cho tôi biết lý do tại sao điều này xảy ra?

Trả lời

16

.childrenonly goes one level down. Sử dụng .find thay thế:

$('#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

Là sự kết hợp của việc sử dụng val() và tìm thấy –

+0

Cá nhân, tôi sẽ sử dụng '.val()', nhưng '.text()' sẽ hoạt động cho 'textarea'. Xem http://jsfiddle.net/kfD7b/ để có bản trình diễn. – pete

4

Bạn đang sử dụng text() trên <textarea> khi bạn nên sử dụng val()

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

Điều này đúng với nhiều loại yếu tố đầu vào khác như <select><input>

+1

Cần lưu ý rằng tất cả các yếu tố được thiết kế cho đầu vào, chẳng hạn như 'đầu vào',' textarea' và 'select' sẽ được truy cập bằng cách sử dụng' val() '. Đây là một trong những điều khiến jQuery trở nên tuyệt vời. – bdares

+0

@bdares điểm tốt, thêm – JaredPar

0

Use .val() instead of .text(). Nó sẽ thực hiện thủ thuật

+0

Có thể giải thích sự khác biệt giữa '.val()' và '.text()' như [ở đây] (http://stackoverflow.com/a/807908/1183294). – sinemetu1

+0

có thực sự .val() làm việc cho phần tử đầu vào và .text không –

0

Bạn không cần sử dụng children hoặc find. Vì bạn đã có id của mẫu bạn có thể sử dụng cho cơ sở của bạn và chỉ sử dụng một selector jquery tiêu chuẩn như vậy:

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

bằng cách thêm một đối số seocnd bạn đang nói jquery để chỉ this sử dụng như là cây DOM .

Các vấn đề liên quan