Frage

Ich habe ein Auswahlfeld, die dynamisch mit einem Ajax-Aufruf aufgefüllt wird, dass einfach alle Optionen auswählen die HTML zurückgibt. Hier ist der Teil des PHP, dass nur Echo ist die Auswahl-Tags und dynamisch füllt jede Option / Wert.

echo "<select name='player1' class='affector'>";
echo "<option value='' selected>--".sizeof($start)." PLAYERS LOADED--</option>";

foreach ($start as $value) {
    echo "<option value='".$value."'>".$value."</option>";
 }  
  echo "</select>";
}  

Nach dieser Liste aufgefüllt wird, ich versuche ein Änderungsereignis zu nennen, so dass, wenn die Standardoption in der SELECT-Liste oder in einem Textfeld mit der gleichen Klasse geändert wird, deaktiviert er ein Optionsfeld Satz in einem anderen Teil des Formulars. (Sie können die anfängliche Frage sehe ich gebeten, diesen Teil der Funktionalität zum Laufen zu bringen? hier )

$('.affector').change(function(){
       $(this).parents('tr').find('input:radio').attr('disabled', false);
});

Aus irgendeinem Grund, obwohl ich das Auswahlfeld den richtigen Klassennamen (Affektor) geben, wenn ich verschiedene Optionen im Feld auszuwählen, führen Sie die anderen Teile des Formulars nicht deaktivieren. Das statische Textfeld mit der gleichen Klasse funktioniert. Ich bin ratlos.

Irgendwelche Ideen?

War es hilfreich?

Lösung

Just kommentiert Ihre letzte Frage ... Hier ist, was ich sagte:

Mit jQuery bind

function addSelectChange() {
   $('select').bind('change', function() {
       // yada yada
   });
} 

Anruf addSelectChange in Ihrer Ajax-Erfolg-Funktion. Es sollte den Trick tun. Werfen Sie einen Blick auf jQuery zu Live-Event (für, wenn Sie möchten, Set Veranstaltungen für alle aktuellen und zukünftigen DOM-Elemente in einem späteren Projekt oder etwas). Leider sind das Änderungsereignis und ein paar andere noch nicht mit Live unterstützt. Bind ist die nächste beste Sache

Andere Tipps

A mehr auf dem aktuellen Stand Antwort ..

Da die Elemente dynamisch bevölkert sind, die Sie suchen Ereignis Delegation .

Verwenden Sie keine .live() / .bind() / .delegate(), though. Sie sollten verwenden .on() .

Nach dem jQuery API-Dokumentation :

  

Wie von jQuery 1.7, die .on() Methode ist die bevorzugte Methode Event-Handler zu einem Dokument anzubringen. Bei älteren Versionen der .bind() Verfahren zum Anbringen eines Event-Handler direkt verwendet zu den Elementen. Handlers ist mit den aktuell ausgewählten Elementen in dem jQuery-Objekt angebracht ist, so dass diese Elemente an dem Punkt, den Anruf existieren muss .bind() auftritt. Für flexiblere Ereignisbindung finden Sie in der Diskussion der Veranstaltungs Delegation in .on() .

Daher würden Sie so etwas wie folgt verwenden:

$(document).on('change', 'select', function (e) {
    /* ... */
});

Ein Beispiel unter Verwendung von .live ()

$('#my_form_id select[name^="my_select_name"]').live('change', (function () {
    console.log( $("option:selected", this).val());
    })
 );

Für Elemente, die in das DOM dynamisch eingefügt werden, müssen ihre Veranstaltungen mit bindenden

$('.selector').bind('change',function() { doWork() });

Das ist, weil, wenn Sie laufen $(function(){}); und binden Ereignisse mit $.click oder $.change usw. Sie Ereignisse Elemente sind verbindlich bereits im DOM vorhandenen . Jede Manipulation Sie danach tun wird nicht beeinflusst durch was auch immer geschieht, in dem $(function(){}); Anruf. $.bind sagt Ihre Seite für zukünftige Elemente in Ihrem Wähler als aktuelle, als auch zu suchen.

versuchen .live: http://docs.jquery.com/Events/live

Von docs: Wird ein Handler auf ein Ereignis (wie Klick) für alle aktuellen - und zukünftigen - verglichene Element. Kann auch binden benutzerdefinierte Ereignisse.

fand ich als Lösung nur machen

<select id="myselect"></select> 

in PHP / HTML-Datei und dann erzeugen Optionen für die es von Ajax:

$.post("options_generator.php", function (data) { $("#myselect").append(data); });

In options_generator.php Echo Optionen nur:

echo "<option value='1'>1</option>";
echo "<option value='2'>2</option>";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top