2011-01-05 7 views
0

Ich habe folgendes:jQuery für ein Textfeld der Eingabe bekommen

textareaID = 'comment_content_300' 
textareaValue = $('#' + textareaID).val(); 

Was ich aus nicht ist herausfinden kann, manchmal das funktioniert manchmal nicht. Es funktioniert, wenn die Seite mit dem Formular geladen wird, das das obige verwendet.

Es funktioniert nicht, wenn die Website geladen wird, und eine Ajaxlast injiziert das Kommentarformular, das das obige verwendet, gibt nichts zurück, leer, nicht unidentifiziert, nur leer.

Irgendwelche Ideen?

Aufrüsten CODE

JS

$('.new_comment').live('submit', function() { 

    textareaID = $(this).find('textarea').attr('id'); 
    commentableID = textareaID.replace('comment_content_', ''); 
    textareaValue = $('#' + textareaID).val(); 
    textareaValue = jQuery.trim(textareaValue); 
    . 
    . 
console.log(textareaValue); 

kehrt leer

ajax call doesn't happen until down here 

HTML

<div class="write-comment"> 
<textarea class="comment_content_bigbox" cols="40" id="comment_content_297" name="comment[content]" placeholder="Write your reply here..." rows="20" style="color: black; "> 
</textarea> 
</div> 
+0

Wird dies außer dem Formular auf die Seite des AJAX-Aufrufs gestellt, oder war dieser Code bereits vorhanden, bevor das Formular über AJAX ankommt? –

+0

Können Sie den Code Ihres AJAX-Anrufs posten? Vielleicht rufst du '$ (" # comment_content_300 ")' bevor es fertig ist? –

+0

Dieser Code war VOR dem injizierten Inhalt. – AnApprentice

Antwort

1

Kann ich nicht sagen sicher, ohne mehr Code zu sehen, aber ich würde vermuten, dass, anstatt diesen Code im Rückruf an die AJAX-Anfrage aufrufen, Sie es nach die Anfrage nennen.

Wenn das stimmt, dann ist dies, weil der Code nach die Anfrage nicht auf die Antwort wartet, bevor es ausgeführt wird. Deshalb ermöglicht $.ajax() Rückruffunktionen.

Etwas wie:

var textareaID, textareaValue; 

$.ajax({ 
    url: 'someurl', 
    success: function(d) { 
     $('body').append(d); 
     textareaID = 'comment_content_300'; 
     textareaValue = $('#' + textareaID).val(); 
    } 
}); 

EDIT: Problem mit doppelter IDs war.

+0

Dies geschieht alles vor dem Ajax Anruf. Ich benutze dies, um die val() Länge zu überprüfen und stelle sicher, dass es GT 1 ist, bevor es über Ajax gesendet wird. – AnApprentice

+0

@Anapprentice: Sie sind sicher, dass die 'textareaID' korrekt ist? Haben Sie die Länge des resultierenden jQuery-Objekts getestet? 'alert ($ ('#' + textareaID) .length);' EDIT: Sorry, habe gerade bemerkt, dass du direkt aus dem Textfeld kommst. Trotzdem würde ich Alarm schlagen. – user113716

+0

Alerting gibt 1, es funktioniert einfach nicht – AnApprentice

Verwandte Themen