Ich habe ein Flag verwendet, um zu kommunizieren, dass die Änderung, die bei der Auswahl aufgetreten ist, wegen des Benutzers des Skripts ist.
Überprüfen Sie dies.
Wenn der Benutzer eine Auswahl ändert, wird in der zweiten Auswahl nichts ausgeführt, sodass die Änderungskette unterbrochen wird.
var script_triggred_change = false;
$("#one").change(function() {
console.log("Called One");
if (script_triggred_change) return;
script_triggred_change = true;
$("#two").val($("#one").val()).change();
script_triggred_change = false;
});
$("#two").change(function() {
console.log("Called Two");
if (script_triggred_change) return;
script_triggred_change = true;
$("#one").val($("#two").val()).change();
script_triggred_change = false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="one">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select id="two">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
Können Sie eine jsFiddle posten? –
überprüfen Sie den 'neuen Wert' und' alten Wert'. Wenn beide identisch sind, rufen Sie nicht 'change' auf. Andernfalls rufen Sie 'change' auf. Sie müssen dies in beiden Ereignissen überprüfen. Ich denke, das Problem, vor dem Sie stehen, ist, dass jedes Ereignis ständig andere Ereignisse anspricht. Das geht "unendlich". Überprüfen Zustand vor dem Brennen "ändern" ist das Beste, was ich für jetzt denken könnte. – Venky
Warum feuern Sie explizit 'change()' Ereignis? –