¿Cómo obtener el valor de un área de texto en jquery?

81

Tengo este formulario y estoy tratando de obtener el valor del área de texto. por alguna razón no quiere.

<form action="/profile/index/sendmessage" method="post" enctype="application/x-www-form-urlencoded">
    <div class="upload_form">
        <dt id="message-label"><label class="optional" for="message">Enter Message</label></dt>
        <dd id="message-element">
        <textarea cols="60" rows="5" id="message" name="message"></textarea></dd>
        <dt id="id-label">&nbsp;</dt>
        <dd id="id-element">
        <input type="hidden" id="id" value="145198" name="id"></dd>
        <dt id="send_message-label">&nbsp;</dt>
        <dd id="send_message-element">
        <input type="submit" class="sendamessage" value="Send" id="send_message" name="send_message"></dd>
    </div>
</form>


$("input.sendamessage").click(function(event) {
    event.preventDefault();

    var message = $('textarea#message').html();
    var id      = $('input#id').val();

    console.log(message + '-' + id);
});

o jsfiddle

¿algunas ideas?

Patrioticovaca
fuente

Respuestas:

156

El valor de textarea también se toma con el valmétodo:

var message = $('textarea#message').val();
Visión
fuente
23

.val()Debe usar para textarea ya que es un elemento y no un contenedor. Tratar

$('textarea#message').val()

Violín actualizado

Selvakumar Arumugam
fuente
17

deberías usar en val()lugar dehtml()

var message = $('#message').val();
indefinido
fuente
10

en javascript:

document.getElementById("message").value
Saurabh Chandra Patel
fuente
De la documentación de Mozilla : " <textarea>no admite el valueatributo".
Cristian Ciupitu
5

No necesitas usar textarea#message

var message = $('textarea#message').val();

Puedes usar directamente

var message = $('#message').val();
SidTechs1
fuente
2

Debe verificar que el área de texto sea nula antes de usar val (); de lo contrario, obtendrá un error indefinido.

if ($('textarea#message') != undefined) {
   var message = $('textarea#message').val();
}

Entonces, podrías hacer lo que sea con el mensaje.

Wuji
fuente
Esto es incorrecto. jQuery nunca devuelve undefined para ninguna consulta. En cambio, devuelve un conjunto vacío. Sin embargo, llamar a val en un conjunto vacío devuelve un indefinido, pero su respuesta no resuelve este problema.
Xiyng
2

$('textarea#message')no puede ser indefinido (si por $supuesto se refiere a jQuery).

$('textarea#message')puede ser de longitud 0 y luego $('textarea#message').val()estaría vacío, eso es todo

Zbyszek Swirski
fuente
2

También puede obtener el valor por atributo de nombre del elemento .

var message = $("#formId textarea[name=message]").val();
rahim.nagori
fuente
1

No necesitas usar .html(). Deberías ir con .val().

Del doc de .val():

El .val()método se utiliza principalmente para obtener los valores de elementos de formulario como input, selecty textarea. Cuando se llama a una colección vacía, regresa undefined.

var message = $('#message').val();
Jawwad Ali Khan
fuente
1

all Values ​​siempre se toma con .val().

ver el código a continuación:

var message = $('#message').val();
محمد المسلم
fuente
-1

También puede obtener valor por nombre en lugar de id como este:

var message = $('textarea:input[name=message]').val();
Ajay
fuente