/ / Premenná selektora id jquery sa nemôže viazať na onchange - javascript, jquery, premenné, dynamické, selektory jquery

Premenná selektora id jQu sa nemôže viazať na onchange - javascript, jQuery, premenné, dynamické, jQuery-selektory

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ď č. 1

Omotajte 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 );
});
}