2016-09-11 1 views
1

HTML und PHP:Wert von Textarea in Schleife

foreach($questions as $question) 
{ 
     ?><br><textarea class="answer">Answer here...</textarea><button data-id="<?php echo $question->id;?>"class="addanswer">Post</button><?php 
} 

jquery:

$(document).on('click','.addanswer',function(e) 
{ 
    e.preventDefault(); 
    var answer=$('textarea.answer').val(); 
    var q_id=$(this).data('id'); 
    alert(answer); 
    alert(q_id); 

bekam ich den Text i für die erste Frage in dem Textfeld eingeben. Für alle anderen Fragen warnt es nur hier Antwort ... obwohl ich die erwartete q_id bekommen habe.

Antwort

3

Das ist Ihr Problem:

var answer=$('textarea.answer').val(); 

Dies immer Sie den Wert des ersten $('textarea.answer') Elements geben, dass jQuery begegnet; Es ist in keiner Weise mit der angeklickten Schaltfläche verknüpft.

Sie wollen den Wert des Elements neben der Schaltfläche Sie geklickt haben, so mit diesem HTML-Struktur, könnten Sie verwenden:

var answer = $(this).prev().val(); 
+0

also muss ich auch textarea nicht Klasse zuweisen. – Steve

+0

@Steve In diesem Beispiel ist es nicht unbedingt notwendig, aber ich würde es wahrscheinlich trotzdem machen ... – jeroen

0

Sie können jede Textfeld/Schaltfläche in einem übergeordneten Knoten wickeln. btw. sehr dreckiger Code ;-)

// PHP: 
$template = '<div><textarea class="answer">Answer here...</textarea><button data-id="%ID%" class="addanswer">Post</button></div>'; 

foreach($questions as $question) 
    echo str_replace('%ID%', $question->id, $template); 


// JQUERY: 

$(document).on('click','.addanswer',function(e) { 
    e.preventDefault(); 
    var answer=$('textarea.answer', this.parentNode).val(); 
    var q_id=$(this).data('id'); 
    alert(answer); 
    alert(q_id); 

    ....