Der folgende Code funktioniert wie erwartet. Es erhöht die .heads div Breite, wenn #yy Knopf schlagen und nimmt es, wenn #zz drücken:Was unterscheidet die folgenden jquery-Loops?
var q = ["#zz", "#yy"];
var c;
$.each(q, function(key, value)
{
$(document).on('click', value, function()
{
c = (key == 0 ? -20 : 20);
$('.heads').css("width", $('.heads').width()+c);
});
});
Allerdings, wenn ich den Code an die unter einem ändern, wird es in beiden Fällen die Breite der erhöhen. Köpfe div:
var q = ["#zz", "#yy"];
var c;
$.each(q, function(key, value)
{
c = (key == 0 ? -20 : 20);
$(document).on('click', value, function()
{
$('.heads').css("width", $('.heads').width()+c);
});
});
Die Frage ist: warum? Die $ .each-Schleife läuft in beiden Fällen zweimal und c ist -20 in der ersten Iteration und +20 in der zweiten. Aber wenn ich console.log (c) in der .on-Funktion sehe, sieht es aus wie +20 in beiden Fällen im letzten Codeblock und (wie erwartet entweder -20 oder +20 im ersten Codeblock.
Logische Probleme beiseite, Ihre Schleife ist völlig redundant. Verwenden Sie '$ (Dokument) .on ('click', '#zz, #yy', fn); 'und speichert alle zugehörigen Metadaten in einem Attribut 'data-' auf dem Element. –
Sie meinen die 'Javascript-Schließung'? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures –
Sie sind richtig. Es liegt an der Schließung. Wenn Sie var c entfernen; in Zeile 2 und update Zeile 5 zu "var c = ....", dann sollte es wieder funktionieren. –