peter: onclick-Event bearbeiten. IE-Bug

Hallo,

ich möchte ein onclick-Event von img bearbeiten:

<img id="preview_link" onclick="printview('/druckansicht.php?pid=114316&type=BRIEF');" title="Vorschau" src="/symbol_preview.gif"/>

---
var preview_link = document.getElementById('preview_link').getAttribute('onclick');

//Ersetze EMAIL gegen BRIEF
preview_link = preview_link.toString().replace('BRIEF','EMAIL');

document.getElementById('preview_link').setAttribute('onclick', preview_link);
---

Leider funktioniert das onclick-event nach der Bearbeitung im IE nicht mehr...

FF läuft alles prima. Was mache ich falsch?

Danke für Hilfe,
peter f.

PS: jquery darf auch genutzt werden...

  1. Mahlzeit peter,

    (Was haben bloß alle ständig mit getAttribute() und setAttribute()? Dass der IE damit manchmal ziemliche Probleme hat, sollte doch mittlerweile einigermaßen bekannt sein ...)

    <img id="preview_link" onclick="printview('/druckansicht.php?pid=114316&type=BRIEF');" title="Vorschau" src="/symbol_preview.gif"/>

    Was machen Leute, die kein Javascript aktiviert haben? Nutze stattdessen z.B. folgende Struktur:

    <a href="/druckansicht.php?pid=114316&type=BRIEF" target="_blank"><img id="preview_link" onclick="printview(this.parentNode.href); return false;" title="Vorschau" src="/symbol_preview.gif"/></a>

    Dann dürfte nämlich das Manipulieren des entsprechenden Links kein Problem sein:

    var preview_link = document.getElementById('preview_link').parentNode.href;  
      
    //Ersetze EMAIL gegen BRIEF  
    preview_link = preview_link.toString().replace('BRIEF','EMAIL');  
      
    document.getElementById('preview_link').parentNode.href = preview_link;
    

    PS: jquery darf auch genutzt werden...

    Hm - und warum tust *Du* das dann nicht? :-)

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Danke für den 'Workaround' ;-)

      Funktioniert...

      Gruß,
      peter f.

      Mahlzeit peter,

      (Was haben bloß alle ständig mit getAttribute() und setAttribute()? Dass der IE damit manchmal ziemliche Probleme hat, sollte doch mittlerweile einigermaßen bekannt sein ...)

      <img id="preview_link" onclick="printview('/druckansicht.php?pid=114316&type=BRIEF');" title="Vorschau" src="/symbol_preview.gif"/>

      Was machen Leute, die kein Javascript aktiviert haben? Nutze stattdessen z.B. folgende Struktur:

      <a href="/druckansicht.php?pid=114316&type=BRIEF" target="_blank"><img id="preview_link" onclick="printview(this.parentNode.href); return false;" title="Vorschau" src="/symbol_preview.gif"/></a>

      Dann dürfte nämlich das Manipulieren des entsprechenden Links kein Problem sein:

      var preview_link = document.getElementById('preview_link').parentNode.href;

      //Ersetze EMAIL gegen BRIEF
      preview_link = preview_link.toString().replace('BRIEF','EMAIL');

      document.getElementById('preview_link').parentNode.href = preview_link;

      
      >   
      >   
      > > PS: jquery darf auch genutzt werden...  
      >   
      > Hm - und warum tust \*Du\* das dann nicht? :-)  
      >   
      >   
      > MfG,  
      > EKKi  
      > 
      
  2. Hallo,

    Mit dem IE gebe ich mich selber nicht ab, habe aber hier schon oft gelesen, dass der mit setAttribute gerne rumzickt.

    Probier's mal statt

    document.getElementById('preview_link').setAttribute('onclick', preview_link);

    direkt mit
    document.getElementById('preview_link').onclick = preview_link;

    Btw, du schreibst tatsächlich die function-body um? Ganz schön verwegen...

    Gruß, Don P

    1. Mahlzeit Don P,

      document.getElementById('preview_link').onclick = preview_link;

      Das wird wenig bringen, da die Javascript-Eigenschaft "onclick" sowohl eine Funktionsreferenz zurückliefert als auch erwartet ... einen einfach String dort zuzuweisen dürfte nicht funktionieren.

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      1. Hallo Ekki,

        ...einfach einen String dort zuzuweisen dürfte nicht funktionieren.

        Ach ja, jetzt ist es ja ein String, ich vergaß. Wie gesagt: Ziemlich verwegen, im Function-Body rumzuschreiben. Auf so eine Idee bin ich bis jetzt noch nie gekommen.

        Gruß, Don P

        1. Hi,

          ...einfach einen String dort zuzuweisen dürfte nicht funktionieren.

          Das kommt auf den Browser an.

          window.setTimeout("Textliteral, das auszufuehrenden JavaScript-Code enthaelt", 1234) unterstützen alle mir bekannten Browser - einen wirklich trifftigen Grund, bei onclick="Textliteral, ..." nicht analog zu verfahren, kann ich nicht erkennen.

          Aber selbst wenn das ein Browser anders sieht, kein Beinbruch -

          Wie gesagt: Ziemlich verwegen, im Function-Body rumzuschreiben.

          • den Konstruktur des Function-Objektes kann man ja auch mit JS-Code als Textliteral füttern.

          "Sauberer" wird's dadurch natürlich auch nicht. Vernünftig umgesetzt würde man den fraglichen, "auszutauschenden" Inhalt wohl eher als Parameter ausserhalb der Funktion ablegen, so dass diese ihn selber einlesen kann.

          MfG ChrisB

          --
          “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  3. @@peter:

    nuqneH

    <img id="preview_link" onclick="printview('/druckansicht.php?pid=114316&type=BRIEF');" title="Vorschau" src="/symbol_preview.gif"/>

    Das ist kein valides HTML:
    '&' muss maskiert werden. [HTML401 §B.2.2]

    Und das für 'img' zwingend notwendige 'alt'-Attribut fehlt auch.

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)