Lichtgestalt: Methode .click() im Objekt nicht erreichbar

Hallo Ihr Pofikicker,

warum haben mein Objekte nicht die Methode click()? Ich habe verchiedene Links (nennen wir sie "mein_link"), die per JavaScript in die Seite geschrieben werden und diese haben wiederum ein href="javascript:meine_funktion()". Das funktioniert soweit prächtig, wenn ich mit der Maus auf den Link klicke. Wenn ich aber nun den gleichen Link von irgendwoher aufrufe und mit mein_link.click() per JavaScript "anklicken" will, kommt die Fehlermeldung "mein_link.click is not a function". Hä??? Ich habe überprüft, ob wirklich die richtigen Objekte aufgerufen werden etc. alles korrekt.

Und jetzt der Hammer: wenn ich diesen Objekten (Links) bei deren Erstellung zusätzlich dies zuweise:

mein_link.click = function(){alert("hallo")}

dann haben sie wieder die Clickmethode. Ich kann dann per Fernsteuerung der Link "anklicken" und der Alert kommt auch. Was ist da faul?

Quelltext wollte ich ersmal nicht posten, weil das Programm schon so riesig ist. Da müsste ich erstmal langwierig was extrahieren.

  1. Hallo,

    warum haben mein Objekte nicht die Methode click()? Ich habe verchiedene Links (nennen wir sie "mein_link"), die per JavaScript in die Seite geschrieben werden und diese haben wiederum ein href="javascript:meine_funktion()". Das funktioniert soweit prächtig, wenn ich mit der Maus auf den Link klicke. Wenn ich aber nun den gleichen Link von irgendwoher aufrufe und mit mein_link.click() per JavaScript "anklicken" will, kommt die Fehlermeldung "mein_link.click is not a function". Hä???

    Wo steht, dass HTMLAnchorElemente standardmäßig eine Methode .click() haben?

    Und jetzt der Hammer: wenn ich diesen Objekten (Links) bei deren Erstellung zusätzlich dies zuweise:

    mein_link.click = function(){alert("hallo")}

    dann haben sie wieder die Clickmethode. Ich kann dann per Fernsteuerung der Link "anklicken" und der Alert kommt auch. Was ist da faul?

    Nichts. Du hast dem einen Element eine eigene zusätzliche Methode .click() zugewiesen. Das darfst Du gerne tun. In vollständig DOM-kompatiblen Browsern (Geckos, neuer Opera) kannst Du sogar dem Prototyp aller HTMLAnchorElemente eine solche Methode zuweisen:

      
    HTMLAnchorElement.prototype.click = function() {if (this.href) window.location.href = this.href};  
    
    

    Der IE kann das nicht.

    Allerdings kannst Du statt mein_link.click() ja auch

      
    if (mein_link.href) window.location.href = mein_link.href;  
    
    

    schreiben.

    viele Grüße

    Axel

    1. Wo steht, dass HTMLAnchorElemente standardmäßig eine Methode .click() haben?

      in SELFHTML. Frag mich nicht wo. Irgendwo stand da, daß grundsätzlich Objekte, die einen Klick entgegennehmen können, auch eine solche Methode haben.

      Warum rufst Du statt mein_link.click() nicht die Funktion meine_funktion() direkt auf?

      weil jeder Link die Funktion mit eigenen Parametern aufruft, die ich vor Laufzeit noch nicht kenne.

      Allerdings kannst Du statt mein_link.click() ja auch

      if (mein_link.href) window.location.href = mein_link.href;

      
      > schreiben.  
        
      interessant. Das probier ich mal und melde mich wieder.
      
      1. Hallo,

        in SELFHTML. Frag mich nicht wo.

        http://de.selfhtml.org/javascript/objekte/all.htm#click
        Beachte die Browsersymbole.

        Warum rufst Du statt mein_link.click() nicht die Funktion meine_funktion() direkt auf?
        weil jeder Link die Funktion mit eigenen Parametern aufruft, die ich vor Laufzeit noch nicht kenne.

        Argument abgelehnt ;-). Die Parameter können zur Laufzeit nur durch clientseitiges JavaScript in das href-Attribut geschrieben werden. Das selbe clientseitige JavaScript kann dann auch statt myLink.click() die Funktion mit den Parametern aufrufen. Wenn es nur darum geht, die Parameter bis zum Aufruf irgendwo zu parken, so bieten sich hierfür Variablen oder Objekte an.

        viele Grüße

        Axel

        1. in SELFHTML. Frag mich nicht wo.
          http://de.selfhtml.org/javascript/objekte/all.htm#click
          Beachte die Browsersymbole.

          das Beispiel habe ich auch wiedergefunden, das meinte ich aber nicht. Es stand wirklich irgendwo diese allgemeine Bemerkung.

          Wenn es nur darum geht, die Parameter bis zum Aufruf irgendwo zu parken, so bieten sich hierfür Variablen oder Objekte an.

          im Prinzip stimmt das. Ich habe die Links als Variablenspeicher mißbraucht ;-) Ich fand das sehr praktisch. Andernfalls müsste ich jeden Link numerieren, um mit derenhilfe die richtige parameter-Variable wiederzufinden. Irgendwie ist das doch gehupft wie gesprungen oder?

          Naja, Deine Methode window.location.href=mein_link.href; funktioniert jedenfalls prächtig. Muß man ja eigentlich nur drauf kommen :-)

  2. Hallo,

    Ich habe verchiedene Links (nennen wir sie "mein_link"), die per JavaScript in die Seite geschrieben werden und diese haben wiederum ein href="javascript:meine_funktion()". Das funktioniert soweit prächtig, wenn ich mit der Maus auf den Link klicke. Wenn ich aber nun den gleichen Link von irgendwoher aufrufe und mit mein_link.click() per JavaScript "anklicken" will,

    Warum eigentlich? Warum rufst Du statt mein_link.click() nicht die Funktion meine_funktion() direkt auf?

    viele Grüße

    Axel