Was ich will, ist auf #bt-1
und ändern Sie die Farbe von #target-1
, klicken Sie auf #bt-2
und ändern Sie die Farbe von #target-2
klicken ... Ich begann für jeden #bt-n
einen bestimmten Click-Ereignishandler schreiben/#target-n
Aber als die Seite größer wurde, dachte ich über eine Schleife nach. Mein Ansatz verwendete eine for-Schleife mit Variablen in jQuery-Selektoren. Hier ist mein Code:Ereignisbehandlungsroutine für Schleife mit dynamischen jQuery Selektoren
$(document).ready(function() {
var total = $('.target').length;
for(n=1; n<=total; n++) {
var num = String(n);
$('#bt-'+num).on('click', function() {
$('#target-'+num).toggleClass('yellow');
});
}
});
.wrapper {
display: flex;
text-align: center;
}
.button, .target {
padding: 20px;
margin: 10px;
}
.button {
background: gray;
}
#target-1 {
background: red;
}
#target-2 {
background: green;
}
#target-3 {
background: blue;
}
.yellow {
background: yellow !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div id="bt-1" class="button">
<h1>Button 1</h1>
</div>
<div id="target-1" class="target">
<h1>Target 1</h1>
</div>
</div>
<div class="wrapper">
<div id="bt-2" class="button">
<h1>Button 2</h1>
</div>
<div id="target-2" class="target">
<h1>Target 2</h1>
</div>
</div>
<div class="wrapper">
<div id="bt-3" class="button">
<h1>Button 3</h1>
</div>
<div id="target-3" class="target">
<h1>Target 3</h1>
</div>
</div>
Ich verstehe nicht, warum es richtet sich nur die letzte #target-n
als die Schleife auf #bt-n
scheint zu funktionieren. Ich habe auch darüber nachgedacht, ein Array zu verwenden, kann aber nicht herausfinden, wie man es implementiert.
Ich konnte es $(this).siblings('.target')...
mit funktioniert das for-Schleife nicht und ids das erfordert aber ein übergeordnetes Element für jeden .button
/.target
, in diesem Fall .wrapper
Code Here. Obwohl dies eine gute Lösung war, würde ich gerne verstehen, was ich falsch gemacht habe und wie man eine Schleife richtig implementiert, ohne die Eltern .wrapper
zu verwenden. Vielen Dank.
anstelle von ''bt -' + num' ich denke, Sie können '' bt - '+ n' –
Mögliche Duplikate von [Zuweisen von Click-Handlern in for-Schleife] (http://stackoverflow.com/questions/4091765/assign-click-handlers-in-for-loop) –
benutze '$ (this) .next(). toggleClass ('yellow')' –