2010-09-16 12 views
7

Ich zeige einen modalen Dialog mit jQuery. Dieser Dialog verfügt über eine textarea Steuerung. Aber beim Senden dieses Dialogfelds wird der Wert dieses textarea von jQuery aus irgendeinem Grund nicht erkannt: Es wird immer leer angezeigt. Dies funktioniert perfekt in anderen Browsern. Ich mache Alarm, um den Wert anzuzeigen, aber es sieht leer aus. Kann mir jemand in dieser Hinsicht helfen?JQuery val() funktioniert nicht für Textarea in Opera

Kontrollen:

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

jQuery-Code, der diesen Wert verwendet:

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

$('#txtDescription').val() kommt leer, aber $('#txtGroupName').val() ist richtig gelesen, da es ein Eingabefeld ist.

Eine weitere Erkenntnis zu diesem Problem:

Als ich setzte Alarm in meiner Update-Funktion nach dem Steuerwert beim Laden der Seite bevölkert, diese Warnung zeigt den vorhandenen Wert richtig. Aber es zeigt nur vorhandenen Wert an. Nach dem Senden der modalen Box wird der bearbeitete Wert nicht angezeigt.

+0

Welchen Browser/welche Plattform verwenden Sie? –

+1

Ich benutze Opera 10.53 und mein Betriebssystem ist Windows 7. –

+0

Ich kann nicht unbedingt mit dem Windows-Teil helfen, aber ich werde Opera auf meiner Ubuntu-Box installieren und sehen, ob ich etwas Nützliches finden kann. –

Antwort

3

dieser Fehler behoben werden diese in Textfeld mit

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

Put am Ende des Skripts. Es tut mir leid für mein Englisch

+0

Danke @Javier ..! das ist richtige Annäherung .. –

1

Haben Sie versucht .attr("text") oder .attr("value")? Ich kann das nicht testen, aber das erscheint mir logisch.

Wenn es nicht dann lassen Sie mich wissen, und ich werde diese Antwort entfernen.

+0

Text gibt 'undefined' und Wert gibt leer –

+0

Ich habe meine Frage mit den neuesten Erkenntnissen aktualisiert .. –

0

Textarea hat kein Wertattribut. Versuchen Sie, verwenden

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

leider Text() funktioniert auch nicht –

+3

Sie haben Recht, es hat kein Wert-Attribut in HTML, aber ich bin mir ziemlich sicher jQuerys 'val()' wird den Textknoten zurückgeben. – alex

+0

Ich habe meine Frage mit den neuesten Erkenntnissen aktualisiert. –

0

Ich habe festgestellt, in Chrome 6.0.472.59, Firefox 3.6.9 und Opera 10.62, alle auf Ubuntu 10.04, dass textarea hat/verwenden, um die .val() Attribut. Auf die aussichtslose Tatsache, dass einige andere Browser nicht oder nicht, stelle ich diese jsbin demo zusammen. Ich benutzte einen if/else Block, um beide Ansätze zu decken. Nur für den Fall ...

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

Diese Frage Stackoverflow (jQuery get textarea text) legt auch nahe, dass es möglich und zuverlässig sein sollte, wie der ersten Kommentator auf der API-Seite für Val(), bei jQuery.com.

Hinweis, was Opera betrifft: Die jsBin Demo funktionierte nur, nachdem ich die Entwickler-Tools deaktiviert hatte (aus welchen Gründen auch immer). Es könnte sich lohnen, Dragonfly auszuschalten (wenn es läuft) und dann die Demoseite (oder natürlich Ihre eigene Testseite) zu aktualisieren, um zu sehen, ob es einen Unterschied macht. In jedem Fall lohnt es sich, den Cache zu leeren, um sicherzustellen, dass die aktuellste Version der Dateien verwendet wird.

+1

danke für den Ansatz. Aber die Sache ist, dass sowohl text() als auch val() hier nicht funktionieren. –

+0

@Anil: Sie sind * sicher *, dass es das '$ ('textarea') ist. Val();' Bit, das nicht funktioniert?Ich weiß, dass es nicht der kanonischste Ort ist, auf den ich verweisen sollte, aber ein Kommentator auf der http://api.jquery.com/val/ für die '.val()' Funktion/Methode schlägt vor, dass * sollte * funktionieren (nachweislich, in den Fällen von Chrome und FF auf Ubuntu). –

+0

Ich habe $ ("# txtDescription"). Val() verwendet, weil das die ID meiner Kontrolle ist. aber nicht funktioniert. Soll ich stattdessen $ ('textarea') benutzen? Ich nahm an, dass 'textarea' durch die ID meiner Kontrolle ersetzt werden sollte. –

0

In der Oper für den Wert oder einen Textbereich immer funktioniert nur:

document.getElementById ("Beschreibung"). Value;

seltsam ist, dass $ ("textara # Beschreibung"). Val ("") arbeitet (Set-Methode)

+0

Das gleiche in Firefox, ich brauchte '$ (" textarea # myelement "). Val (" ");' Weiß nicht warum. – Dex

1

Sie kann haben über einen sehr obskuren Bug auf der Oper in einem Blog-Post genannt kommen sitepatching blog 1 als "PATCH-287, Hack zu machen Skript siehe typisierten Wert in TEXTAREA auf blog.ebuddy.com. Opera nicht korrekte Wert aus einem zuvor versteckten Textbereich lesen".

Ich bin ein wenig zögerlich Workarounds zu empfehlen, ohne jedoch den vollen Code zu sehen.

3

val() und Text() in jQuery korrekt funktioniert, aber nach dem Wert der Textbereich einstellen müssen Sie rerender TextArea-, können Sie

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

Hallo aus Russland diese Einstellung CSS-Eigenschaft in einer solchen Art und Weise tun. Sorry für mein Englisch =)

1

Guten Tag Menschen,

Auch ich habe das gleiche Problem mit Opera 10.63 und Windows.

Der von Javier Canizalez vorgeschlagene Hack funktioniert, aber nur so lange ich den Dialog (und das Textfeld) nicht wiederverwende. Dies ist jedoch nicht der Fall. Mit seinem Hack, nachdem die Seite geladen wurde und ich auf ein Objekt klicke, zeige ich einen Dialog an, der zuvor ausgeblendet war (Anzeige: keine), mit Textarea darin. Beim ersten Mal klappt alles gut (mit dem Hack). Nach dem Schließen des Dialogs/* $ (dialog) .hide()); */und wiederverwendet es durch Klicken auf ein anderes Element, der Hack funktioniert nicht mehr und javascript/jQuery nicht den neuen typisierten Wert nicht mehr, bis eine vollständige Seite neu laden.

Ich fand bei einem der oben angegebenen Links, dass die Jungs in der Oper dieses Problem behoben haben: PATCH-287 Aber es scheint nicht fest zu mir :) Ich schrieb eine Frage und werde sehen, ob sie antworten werden : opera patch-287

Hat es jemand geschafft, eine Abhilfe zu bekommen?

Vielen Dank und viele Grüße.

0

Ich benutze diese Abhilfe:


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

Select <textarea> von Attributnamen anstelle von id.

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