2010-09-16 9 views
7

Estoy mostrando un diálogo modal usando jQuery. Este cuadro de diálogo tiene un control textarea. Pero al enviar este diálogo, el valor de este textarea no es reconocido por jQuery por alguna razón: siempre aparece en blanco. Esto funciona perfectamente en otros navegadores. Puse alerta para mostrar el valor, pero se ve en blanco. ¿Alguien puede ayudarme en este sentido?JQuery val() no funciona para textarea en Opera

Controles:

<input type="text" id="txtGroupName"/> 
<textarea rows="3" cols="30" id="txtDescription"></textarea> 

código jQuery que se usa este valor:

var postData = new Object(); 
postData.GroupName = $('#txtGroupName').val(); 
postData.Description = $('#txtDescription').val(); 

$('#txtDescription').val() viene en blanco, pero $('#txtGroupName').val() se lee correctamente, ya que es un campo de entrada.

Un hallazgo más acerca de este tema:

Cuando puse alerta en mi función de actualización después de poblar el valor de control de carga de la página, esta alerta se muestra el valor existente correctamente. Pero muestra solo el valor existente. No muestra el valor editado después de enviar el cuadro modal.

+0

¿Qué navegador/plataforma estás usando? –

+1

Estoy usando Opera 10.53 y mi sistema operativo es Windows 7. –

+0

No puedo ayudar con la parte de Windows, pero instalaré Opera en mi buzón de Ubuntu y veré si puedo encontrar algo útil. –

Respuesta

3

puedo solucionar este problema usando esto en área de texto

$("#descripcion").keydown(function(){ 
    $("#descripcion").css("display","block"); 
}); 

puesto al final de la secuencia de comandos. Lo siento por mi inglés

+0

Gracias @Javier ..! este es el enfoque correcto ... –

1

¿Has probado .attr("text") o .attr("value")? No puedo probar esto, pero esto me parece lógico.

Si no lo hace, hágamelo saber y eliminaré esta respuesta.

+0

texto da 'indefinido' y el valor da en blanco –

+0

He actualizado mi pregunta con los últimos hallazgos .. –

0

Textarea no tiene un atributo de valor. Trate de usar

$('#txtDescription').text(); 
+1

desafortunadamente texto() tampoco funciona –

+3

Tienes razón, no tiene un atributo de valor en HTML, pero estoy bastante seguro jQuery 'val()' devolverá el nodo de texto. – alex

+0

He actualizado mi pregunta con las últimas conclusiones .. –

0

que he encontrado, en Chrome 6.0.472.59, Firefox 3.6.9 y Opera 10.62, todo en Ubuntu 10.04, que sí tiene textarea/utilizar el atributo .val(). En el caso de que otros navegadores no lo hagan o no, armé este jsbin demo. Sin embargo, utilicé un bloque if/else para cubrir ambos enfoques. Por si acaso ...

$(document).ready(
    function() { 
    $('form').submit(
    function() { 

     if ($('textarea').val()) { 
     var means = 'val()', 
     textValue = $('textarea').val(); 
     } 
     else { 
     var means = 'text()', 
     textValue = $('textarea').text(); 
     } 

     alert('(' + means + ') ' + textValue); 

     return false; 
    } 
    ); 
    } 
); 

Esta pregunta Stackoverflow (jQuery get textarea text) también sugiere que debería ser posible y fiable, al igual que el primer comentarista en la página API para Val(), en jQuery.com.

Nota, en lo que respecta a Opera: la demo de jsBin solo funcionó una vez que desactivé las herramientas de desarrollo (por la razón que sea). Puede valer la pena desactivar Dragonfly (si se está ejecutando) y luego actualizar la página de demostración (o, obviamente, su propia página de prueba) para ver si hace una diferencia. De cualquier manera, siempre vale la pena borrar su caché para asegurarse de que se esté utilizando la versión más actualizada de los archivos.

+1

gracias por el enfoque. Pero la cosa es que text() así como val() no funcionan aquí. –

+0

@Anil: ¿está * seguro * de que es el bit '$ ('textarea'). Val();' que no funciona?Me doy cuenta de que no es el lugar más canónico al que debería referirme, pero un comentarista de la http://api.jquery.com/val/ de la función/método '.val()' sugiere que * debe * funcionar (De manera demostrable, en los casos de Chrome y FF en Ubuntu). –

+0

Utilicé $ ("# txtDescription"). Val() porque esa es la identificación de mi control. pero no funciona ¿Desea que use $ ('textarea') en su lugar? Supuse que 'textarea' debería ser reemplazado por la identificación de mi control. –

0

En ópera para conseguir el valor o un área de texto sólo funciona:

document.getElementById ("Descripción"). Value;

extraño es que $ ("textara # Descripción"). Val ("") funciona (método set)

+0

Lo mismo en Firefox, necesitaba usar '$ (" textarea # myelement "). Val (" ");' No sé por qué. – Dex

1

que puede han llegado a través de un insecto muy oscuro se hace referencia en una entrada de blog en la Opera sitepatching blog 1 como "PATCH-287, Hack para hacer que el script vea el valor tipeado en TEXTAREA en blog.ebuddy.com. Opera no puede leer el valor correcto de un área de texto previamente oculta".

Soy un poco reacio a recomendar soluciones temporales sin ver el código completo.

3

val() y texto() en jQuery funciona correctamente, pero después de ajustar el valor del área de texto que necesita para área de texto reRender, que puede hacer esta propiedad css ajuste de tal manera

if ($.browser.opera) 
    $('textarea').val(someText).css({display:block}); 
else 
    $('textarea').val(someText); 

Hola desde Rusia. Lo siento por mi Inglés =)

1

personas buen día,

yo también tienen el mismo problema con Opera 10.63 y Windows.

El truco sugerido por Javier Canizalez funciona, pero solo si no vuelvo a usar el diálogo (y el área de texto). Sin embargo, éste no es el caso. Con su truco, después de que la página se carga y hago clic en un elemento, aparece un cuadro de diálogo que previamente estaba oculto (mostrar: ninguno) con textarea dentro de él. Todo funciona bien la primera vez (con el truco). Después de cerrar el diálogo/* $ (dialog) .hide()); */y volver a utilizarlo haciendo clic en otro elemento, el truco ya no funciona y javascript/jQuery no obtiene el nuevo valor escrito hasta que se carga la página completa.

Encontré en uno de los enlaces anteriores que los muchachos de la ópera han solucionado ese problema: PATCH-287 Pero no me parece que haya sido solucionado :) Escribí una pregunta y veré si responderán : opera patch-287

¿Alguien ha logrado solucionarlo?

Gracias y un cordial saludo.

0

que utiliza esta solución:


if (window.opera) 
{ 
    document.addEventListener('focus', function(event){ 
    if (event.target instanceof HTMLTextAreaElement) 
    { 
     event.target.contentEditable = true; 
     event.target.contentEditable = false; 
    } 
    }, true); 
} 
0

Seleccionar <textarea> por nombre de atributo en lugar de ID.

<textarea id="txtDescription" name="txtDescription"></textarea> 
<script> 
    jQuery("textarea[name='txtDescription']").val(); 
</script>