2012-03-03 11 views
11

Estoy enviando un formulario usando JQuery. La forma se parece a continuaciónObteniendo TextArea usando 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> 

Y el jQuery para coger la forma se parece a esto:

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

       }); 

la product_id siempre se lee pero la pregunta es siempre producto es nula. ¿Puede alguien decirme por qué está pasando esto?

Respuesta

16

.childrenonly goes one level down. .find utilizar en su lugar:

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

Es una combinación de usar val() y encontrar –

+0

Personalmente, usaría '.val()', pero '.text()' funcionará para 'textarea'. Ver http://jsfiddle.net/kfD7b/ para una demostración. – pete

4

Estás usando text() en un <textarea> cuando se debe utilizar val()

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

Esto es cierto para otros tipos de elementos de entrada como <select> y <input>

+1

Debe tenerse en cuenta que todos los elementos diseñados para la entrada, tales como 'input',' textarea', y 'select' deben ser accedidos usando' val() '. Esta es una de las cosas que hace que jQuery sea increíble. – bdares

+0

@bdares buen punto, agregado – JaredPar

0

Use .val() instead of .text(). Hará el truco

+0

Quizás explique la diferencia entre '.val()' y '.text()' como [aquí] (http://stackoverflow.com/a/807908/1183294). – sinemetu1

+0

sí de hecho .val() trabajo para el elemento de entrada y .text no –

0

No necesita usar children o find. Puesto que ya tiene la id del formulario que puede usar eso para su base y sólo tiene que utilizar un selector de jQuery estándar de este modo:

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

añadiendo un argumento seocnd le está diciendo a jQuery para usar sólo this como el árbol DOM .

Cuestiones relacionadas