Ergebnis 1 bis 3 von 3
  1. #1
    lslah ist offline Grünschnabel
    registriert
    19-05-2010
    Beiträge
    2

    onclick mit Parametern

    Hallo JSWelt ,

    Ich habe ein Problem mit dem onclick-Event des a-Elements.
    Und zwar versuche ich per for-Schleife a-Elemente zu erstellen, die bei onclick die Methode chooseSuggest mit dem Parameter 'i', also dem Schleifenzähler aufrufen.
    Die entsprechenenden Methoden dazu sehen folgendermaßen aus:

    Code:
    this.AutoComplete.prototype.putSuggests = function () {
        this.clearSuggests();
        var pointer = this;
        for (var i=0; i<this.suggests.length; i++) {
            var suggest = this.suggests[i];
            var html = document.createElement('li');
            var a = document.createElement('a');
    
            a.onclick = function () {pointer.chooseSuggest(i)}
            a.innerHTML = suggest;
            html.appendChild(a);
            this.suggestList.appendChild(html); //suggestList ist ein ul-Element
        }
    }
    
    this.AutoComplete.prototype.chooseSuggest = function (suggest) {
        this.clearSuggests();
        this.fld.value = suggest; // fld ist ein input-Feld
        return 0;
    }
    So das Problem ist, dass in this.fld.value am Ende egal auf welchen Link ich klicke die gleiche Zahl steht, nämlich immer das 'i' von nach dem letzten Schleifendurchlauf.
    Also das "fühlt" sich so an, als würde der Zeiger auf 'i' und nicht der Wert von 'i' übergeben.
    Weiß eventuell jemand wie man das geradebiegt und was genau das Problem ist?

    Ich hoffe, der Code ist einigermaßen verständlich. Es geht im Ganzen um eine Auto-Suggest-System wie bei der Google Toolbar ungefähr.

  2. #2
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: onclick mit Parametern

    Du arbeitest hier mit einer Closure... und damit wird in der Funktion einfach die gleiche Variable genommen - und die ist nun mal am Ende immer this.suggests.length.

    Um das zu verhindern kannst du entweder deinen <a>s ein neues Attribut (z.B. index) geben, dort i speichern und dann über this.index darauf zugreifen oder du kapselst das ganze nocheinmal:
    Code:
    a.onclick = (function(i){
    	return function(){pointer.chooseSuggest(i)}
    })(i)
    oder du packst dein ganzes DOM-Gedöns in eine separate Funktion - ist hier aber wahrscheinlich nicht sinnvoll.
    Geändert von kkapsner (19-05-2010 um 11:34 Uhr) Grund: Klammern vergessen.

  3. #3
    lslah ist offline Grünschnabel
    registriert
    19-05-2010
    Beiträge
    2

    AW: onclick mit Parametern

    Ich habe es zwar noch nicht ausprobiert, aber es hört sich schlüssig an! :-)
    Vielen Dank für die schnelle Antwort!

Ähnliche Themen

  1. OnClick Event aufheben bei OnMouseMove
    Von silent321 im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 21-06-2009, 16:07
  2. RollOver problematik
    Von mavebox im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 03-04-2009, 13:02
  3. Problem mit onclick
    Von Thirdheaven im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 02-06-2007, 13:33
  4. onclick für eine ganze Tabellenzeile. außer ein Element
    Von Nussmischung im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 20-12-2006, 16:18
  5. funktion zu onclick hinzufügen
    Von tomm3 im Forum JavaScript
    Antworten: 3
    Letzter Beitrag: 12-09-2005, 16:35

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •