2010-09-16 11 views
7

Sto visualizzando una finestra di dialogo modale usando jQuery. Questa finestra di dialogo ha un controllo textarea. Tuttavia, durante l'invio di questa finestra di dialogo, il valore di questo textarea non viene riconosciuto da jQuery per qualche motivo: viene sempre visualizzato in bianco. Funziona perfettamente con altri browser. Metto alert per visualizzare il valore ma sembra vuoto. Qualcuno può aiutarmi in questo senso?JQuery val() non funziona per textarea in Opera

Controlli:

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

codice jQuery che ha usato questo valore:

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

$('#txtDescription').val() viene vuoto ma $('#txtGroupName').val() viene letto correttamente come si tratta di un campo di input.

più Un dato su questo problema:

Quando ho messo nel mio avviso funzione di aggiornamento dopo il popolamento del valore di controllo al caricamento della pagina, questo avviso viene visualizzato correttamente il valore esistente. Ma visualizza solo il valore esistente. Non mostra il valore modificato dopo aver inviato la casella modale.

+0

Quale browser/piattaforma stai utilizzando? –

+1

Sto usando Opera 10.53 e il mio sistema operativo è Windows 7. –

+0

Non posso necessariamente aiutare con la parte di Windows, ma installerò Opera sulla mia scatola Ubuntu e vedrò se riesco a trovare qualcosa di utile. –

risposta

3

posso risolvere questo problema utilizzando questo textarea

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

put alla fine dello script. Mi dispiace per il mio inglese

+0

Grazie a @Javier ..! questo è giusto approccio .. –

1

Hai provato .attr("text") o .attr("value")? Non sono in grado di testare questo, ma questo mi sembrerebbe logico.

Se non lo fa, fammelo sapere e rimuoverò questa risposta.

+0

restituisce "undefined" e il valore restituisce un valore vuoto –

+0

Ho aggiornato la mia domanda con gli ultimi risultati .. –

0

Textarea non ha un attributo valore. Prova ad utilizzare

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

sfortunatamente text() anche non funzionante –

+3

Hai ragione non ha un attributo value in HTML, ma sono abbastanza sicuro '' val() 'di jQuery restituirà il nodo di testo. – alex

+0

Ho aggiornato la mia domanda con gli ultimi risultati .. –

0

ho trovato, in Chrome 6.0.472.59, Firefox 3.6.9 e Opera 10.62, il tutto su Ubuntu 10.04, che ha textarea/utilizzare l'attributo .val(). Nella remota possibilità che alcuni altri browser non lo fanno, o no, ho messo insieme questo jsbin demo. Ho usato un blocco if/else per coprire entrambi gli approcci, però. Solo nel caso ...

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

Questa domanda StackOverflow (jQuery get textarea text) suggerisce anche che dovrebbe essere possibile e affidabile, così come il primo commentatore sulla pagina API per Val(), a jQuery.com.

Nota, per quanto riguarda Opera: la demo jsBin ha funzionato solo dopo aver disattivato gli strumenti di sviluppo (per qualsiasi motivo). Potrebbe valere la pena di disabilitare Dragonfly (se è in esecuzione) e quindi aggiornare la pagina demo (o, ovviamente, la propria pagina di test) per vedere se fa la differenza. In ogni caso, vale sempre la pena svuotare la cache per assicurarsi che venga utilizzata la versione più aggiornata dei file.

+1

grazie per l'approccio. Ma la cosa è che text() e val() non funzionano qui. –

+0

@Anil: sei * sicuro * che è il '$ ('textarea'). Val();' bit che non funziona?Mi rendo conto che non è il luogo più canonico a cui dovrei fare riferimento, ma un commentatore su http://api.jquery.com/val/ per la funzione/metodo '.val()' suggerisce che è * dovrebbe * funzionare (in modo dimostrabile, nei casi di Chrome e FF su Ubuntu). –

+0

Ho usato $ ("# txtDescription"). Val() perché è l'id del mio controllo. ma non funziona Vuoi che usi $ ('textarea') invece? Supponevo che "textarea" dovesse essere sostituita dall'ID del mio controllo. –

0

Nell'opera per ottenere il valore o una textarea funziona solo:

document.getElementById ("descrizione") il valore;.

strana è che $ ("textara descrizione #"). Val ("") funziona (metodo set)

+0

Lo stesso in Firefox, avevo bisogno di usare '$ (" textarea # myelement "). Val (" ");' Non so perché. – Dex

1

si può avere incontrato un bug molto oscura di cui in un blog post sul Opera blog sitepatching 1 come "PATCH-287, Hack per far sì che lo script veda il valore digitato in TEXTAREA su blog.ebuddy.com. Opera non legge il valore corretto da una textarea precedentemente nascosta".

Sono un po 'riluttante a ripensare a soluzioni alternative senza vedere il codice completo.

3

val() e testo() in jQuery funziona correttamente, ma dopo aver impostato il valore del textarea è necessario textarea nuovamente sottoposti a rendering, è possibile farlo proprietà CSS impostazione in modo tale

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

Ciao dalla Russia. Ci dispiace per il mio inglese =)

1

Buona gente al giorno,

anch'io ho lo stesso problema con Opera 10.63 e Windows.

L'hack suggerito da Javier Canizalez funziona, ma solo fino a quando non riuso nuovamente la finestra di dialogo (e la textarea). Tuttavia, questo non è il caso. Con il suo hack, dopo che la pagina è stata caricata e faccio clic su un elemento, visualizzo una finestra di dialogo precedentemente nascosta (display: none) con textarea al suo interno. Tutto funziona bene la prima volta (con l'hack). Dopo aver chiuso la finestra di dialogo/* $ (dialog) .hide()); */e riutilizzandolo di nuovo facendo clic su un altro elemento, l'hack non funziona più e javascript/jQuery non ottiene più il nuovo valore digitato fino a quando non si ricarica una pagina intera.

Ho trovato uno dei link sopra riportati che i ragazzi dell'opera hanno risolto il problema: PATCH-287 Ma non mi sembra corretto :) Ho scritto una domanda lì e vedrò se risponderanno : opera patch-287

Qualcuno è riuscito a ottenere una soluzione alternativa?

Grazie e cordiali saluti.

0

Io uso questa soluzione:


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

Selezionare <textarea> dal nome dell'attributo invece di id.

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