J. Nanninga: attachEvent für IE (XHTML-, DOM-kompatibel)

In Mozilla klappt folgender Code einwandfrei, im MSIE 6 nicht. Was soll der Code machen? Wenn der User in ein <input type="text" /> fokussiert, soll der Text darin verschwinden, wenn er es verlässt, soll der alte Text erscheinen oder der neu eingetragene bleiben.
Jedes dieser inputs hat eine id und ein value, die immer gleich sind.

var ids = new Array("name","password",...); // die ids der inputs, die einen event kriegen sollen.

for(i = 0;i < ids.length;i++) { //die ids werden einzeln durchgegangen
  if(document.getElementById(ids[i])) { // hier geht's für Mozilla weiter
    if(document.getElementById(ids[i]).addEventListener) {
      document.getElementById(ids[i]).addEventListener("focus",ci,true); // Event wirt "geaddet"
      document.getElementById(ids[i]).addEventListener("blur",co,true);
    } else {
      if(document.getElementById(ids[i]).attachEvent) { // hier geht's für MSIE weiter
        document.getElementById(ids[i]).attachEvent("focus",ci); // Event wird "attacht" (dies scheint auch zu funktionieren, denn attachEvent gibt hier - ich habs getestet - true zurück.
        document.getElementById(ids[i]).attachEvent("blur",co);
      }
    }
  }
}

function ci() {
  if(this.value == this.id) // hier könnte der Fehler liegen. Ich weiß, this an dieser Stelle ist zumindest heikel.. hilft event.srcElement ?
    this.value = ""; // Inhalt wird auf "" gesetzt. Hierdurch entsteht ünrigens ein weiterer Bug - diesmal in Mozilla: die AutoComplete-Funktion von Mozilla kommt offenbar nicht mit auf diese Art geleerten Feldern zurecht...
}

function co() {
  if(this.value == "")
    this.value = this.id; // Inhalt wird, wenn er nicht geändert wurde, wieder auf den Ursprungswert gesetzt.
}

Wie gesagt, bei Mozilla (Firefox und Firebird) funktionierts astrein. In MSIE dagegen passiert einfach nichts! Selbst, wenn in der Funktion co() nur alert("lol"); steht.. dies wird dann wahllos beim Laden der Seite ausgelöst..
Zum Schluss: Es muss DOM-kompatibel bleiben, also nix mit onFocus oder onBlur :)

  1. Ist an dieser Frage irgendetwas nicht richtig? Ich gebe zu, ich hab die selbe Frage heute Nacht zu einem ungünstigen Zeitpunkt gestellt - deswegen habe ich sie wiederholt. Aber das KEINER antwortet, iritiert mich etwas.. Hab extra alles kommentiert und so. :(

    1. Ist an dieser Frage irgendetwas nicht richtig? Ich gebe zu, ich hab die selbe Frage heute Nacht zu einem ungünstigen Zeitpunkt gestellt - deswegen habe ich sie wiederholt.

      </faq/#Q-11>

      Aber das KEINER antwortet, iritiert mich etwas.. Hab extra alles kommentiert und so. :(

      </faq/#Q-10>

      Bleib bitte in deinem Thread [pref:t=72547&m=417853]

      Gunnar

      --
      Good results come from experience; and experience comes from bad results.
    2. Hi,

      Dein Ansinnen mit Dom-Code in allen Ehren, aber ich denke, das IE da noch ein paar Luecken hat. Deine Frage ist nun recht speziell, und ich z. B. habe noch keine Tests auf Lager, bei Events bediene ich IE klassisch.
      Ich denke, Du solltest die Newsgroup de.comp.lang.javascript besuchen (www.dcljs.de), dort gibts ein paar Spezialisten, die Dir moeglicherweise weiterhelfen koennen.

      Gruesse  Joachim

  2. So gehts für den Internet Explorer 6. Für alle, die es wissen wollen.

    function ci_ie() {
      if(document.getElementById(event.srcElement.name).value == event.srcElement.id)
        document.getElementById(event.srcElement.name).value = "";
    }

    1. Hallo,

      So gehts für den Internet Explorer 6. Für alle, die es wissen wollen.

      function ci_ie() {
        if(document.getElementById(event.srcElement.name).value == event.srcElement.id)
          document.getElementById(event.srcElement.name).value = "";
      }

      Das scheint mir unnötig umständlich. Der Nachteil von Doppelpostings ist natürlich auch, dass der Fragende nicht mitbekommt, wenn etwas im alten Thread passiert. Und dort habe ich dir bereits geantwortet: [pref:t=72547&m=418427].

      Mathias