2016-07-08 7 views
0

Ich habe zwei Select-Elemente mit mehreren Optionen, ich verkette sie zusammen, so dass jeder automatisch aktualisiert, wenn der andere sich ändert.Wie wird die Ausführung von 2 JavaScript-Funktionen gegenseitig ausgeschlossen?

Im Moment löst eine Methode aus, die andere macht meine Seite etwas langsam, wie kann ich das vermeiden?

+0

Können Sie eine jsFiddle posten? –

+1

ü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

+0

Warum feuern Sie explizit 'change()' Ereignis? –

Antwort

1

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>

+0

Wie könnte ich nicht daran denken, was ist los mit mir, Programmierung 101 .. Danke :) – Heraclitus

1

Versuchen Sie, diese

var once = false; 
 
$('select').on('change', function(e) { 
 
    if(once) { 
 
    once = false; 
 
    return; 
 
    } 
 
    
 
    once = true; 
 
    $('select').not(this).val($(this).val()).change(); \t 
 
});
select, option { 
 
    padding: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div> 
 
    <select class="lab-ids"> 
 
    <option value="1">1</option> 
 
    <option value="2">2</option> 
 
    <option value="3">3</option> 
 
    <option value="4">4</option> 
 
    <option value="5">5</option> 
 
    </select> 
 

 
    <select class="lab-name"> 
 
    <option value="1">Peter</option> 
 
    <option value="2">Hans</option> 
 
    <option value="3">Fritz</option> 
 
    <option value="4">Sandra</option> 
 
    <option value="5">Jessy</option> 
 
    </select> 
 
</div>

+0

einfach und gut zu lesen +1 – kaito

+1

Ich bin mir nicht ganz sicher, was Sie hier tun, ich denke, Sie rufen ein Bestimmte Elemente ändern ihre Funktion, wenn sich eines der beiden ändert. Ist das richtig? Es sieht sicherlich elegant und ziemlich intelligent aus. Ich habe mein Problem mit guten alten Flaggen behoben. – Heraclitus

Verwandte Themen