user160820
user160820

Reputation: 15210

Where is the error in this code

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

Answers (1)

Pointy
Pointy

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

Related Questions