Mám zoznam vstupných oblastí vo formulári s ID ako „contact1_title“, „contact2_title“, „contact3_title“ ....
A tiež mám zoznam výberu v tejto podobe s ID ako „contact1_name“, „contact2_name“, „contact2_name“ ....
Chcem napísať slučku na dynamické viazanie funkcie onchange pre výbery.
Tu je môj kód:
for(var j=1;j<6;j++){
$("#contact"+j+"_name").change(function() {
alert(j);
//json.engineer is a json object
$("#contact"+j+"_title").val( json.engineer[this.selectedIndex-1].title );
});
}
Keď zmením výber, upozorní ma to vždy 6.
a oblasť zadávania titulu nie je možné zmeniť výberom.
Znamená to, že sa premenná v javascripte vždy mení?
Ako môžem dynamicky viazať akciu?
Môžem ho hacknúť pomocou súboru „this.name.split (" _ ") [0]", ale kód sa javí škaredý.
Vďaka vopred.
odpovede:
2 pre odpoveď č. 1Omotajte svoje change
funkčnosť do uzávierky:
for(var j=1;j<6;j++){
(function(j){
$("#contact"+j+"_name").change(function() {
alert(j);
//json.engineer is a json object
$("#contact"+j+"_title").val( json.engineer[this.selectedIndex-1].title );
});
})(j);
}
Problém bol v tom, že keď kliknete, vaša slučka je už ukončená, takže j
rovná sa 6
.
1 pre odpoveď č. 2
Ďalším riešením by bolo odovzdať počítadlo ako údaje udalosti:
for(var j=1;j<6;j++){
$("#contact"+j+"_name").change({index: j}, function(event) {
$("#contact" + event.data.index + "_title")
.val(json.engineer[this.selectedIndex-1].title );
});
}
Ešte lepšie by bolo, keby ste sa vyhli použitiu a for
slučka, ale to závisí od vášho označenia a od toho, či máte kontrolu nad vytvorenými prvkami, pretože ich na to pravdepodobne musíte upraviť.
0 pre odpoveď č. 3
Uzávierka už existuje, využívajte ju efektívne.
for(var j=1;j<6;j++){
$("#contact"+j+"_name").change(function() {
var k=j;
alert(k);
//json.engineer is a json object
$("#contact"+k+"_title").val( json.engineer[this.selectedIndex-1].title );
});
}