Reputation: 15210
Here is my code snippt. But the code is breaking after inner for loop. But getting no error message. Any idea?
Thanks.
var lastnames = document.getElementsByClassName('box_nachname');
var firstnames = document.getElementsByClassName('box_vorname');
var teilnehmer = document.getElementsByClassName('select');
observers = [];
// iterate over nachname array.
for (var i = 0; i < lastnames.length; i++) {
// Create an observer instance.
observers[i] = new Observer();
// Subscribe oberser object.
for(idx in teilnehmer) {
if(teilnehmer[idx].id.split("_")[0].toLowerCase() !== "zl") {
var anynum = function(element) {
observers[i].subscribe(element, updateTeilnehmerSelectbox);
}(teilnehmer[idx]);
}
}
//on blur the Observer fire the updated info to all the subscribers.
var anynumNachname = function(j, element, value, observer) {
cic.addEvent(lastnames[j], 'blur', observer.fire(element, value));
} (i, lastnames[i], lastnames[i].value, observers[i]);
cic.addEvent(firstnames[i], 'blur', function(element, value, observer) {observer.fire(element, value)}(lastnames[i], lastnames[i].value, observers[i]));
}
Upvotes: 1
Views: 152
Reputation: 413737
You're using the loop variable "i" in the "addEvent" call. That won't work properly because every one of the event handlers will share the same "i" and so each will only see the last value that "i" was set to.
cic.addEvent(firstnames[i], 'blur', (function(index) {
return function(element, value, observer) {
observer.fire(element, value)}(lastnames[index], lastnames[index].value, observers[index]);
};
})(i));
Also, though I'm not sure this is necessary, I'd put the function you're calling for "anynumNachname" in parenthesis:
var anynumNachname = (function(j, element, value, observer) {
cic.addEvent(lastnames[j], 'blur', observer.fire(element, value));
})(i, lastnames[i], lastnames[i].value, observers[i]);
Upvotes: 2