Guardian: IE führt JS funktion nicht aus

Hi,

das leidige Thema IE...

Ich habe eine funktion, die mit innerHTML text tauscht.

Dazu einen Button der die Funktion aufruft.

Dann sagt der IE folgendes:

SCRIPT445: Das Objekt unterstützt diese Aktion nicht.

Markiert ist das onClick="language()"

Jemand ne idee? Ich bin am verzweifeln mit diesem "$)%§)= browser! Chrome, FF, Opera und Safari funktionieren wunderbar.

<button type = "button"  onClick="language()" >
var lang = 1;

	function language()
	{
		if (lang == 1)
		{
			document.getElementById("S1").innerHTML ="Text";
			document.getElementById("S2").innerHTML ="Text";
			document.getElementById("S3").innerHTML ="Text";
			document.getElementById("S4").innerHTML ="Text";
			document.getElementById("S5").innerHTML ="Text";
			document.getElementById("S6").innerHTML ="Text";
			document.getElementById("S7").innerHTML ="Text";
			document.getElementById("S8").innerHTML ="Text";
			document.getElementById("S9").innerHTML ="Text";
			document.getElementById("S11").innerHTML ="Text";
			document.getElementById("S12").innerHTML ="Text";
			document.getElementById("S16").innerHTML ="Text";
			document.getElementById("S17").innerHTML ="Text";
			document.getElementById("S21").innerHTML ="Text";
			document.getElementById("S22").innerHTML ="Text";
			document.getElementById("S23").innerHTML ="Text";
			document.getElementById("S24").innerHTML ="Text";
			lang = 2;
		}
		else
		{
			document.getElementById("S1").innerHTML ="Text";
			document.getElementById("S2").innerHTML ="Text";
			document.getElementById("S3").innerHTML ="Text";
			document.getElementById("S4").innerHTML ="Text";
			document.getElementById("S5").innerHTML ="Text";
			document.getElementById("S6").innerHTML ="Text";
			document.getElementById("S7").innerHTML ="Text";
			document.getElementById("S8").innerHTML ="Text";
			document.getElementById("S9").innerHTML ="Text";
			document.getElementById("S11").innerHTML ="Text";
			document.getElementById("S12").innerHTML ="Text";
			document.getElementById("S16").innerHTML ="Text";
			document.getElementById("S17").innerHTML ="Text";
			document.getElementById("S21").innerHTML ="Text";
			document.getElementById("S22").innerHTML ="Text";
			document.getElementById("S23").innerHTML ="Text";
			document.getElementById("S24").innerHTML ="Text";
			lang =1;
		}
		
	}
	

akzeptierte Antworten

  1. Hallo,

    das leidige Thema IE...

    welcher?

    Ich habe eine funktion, die mit innerHTML text tauscht.

    Dazu einen Button der die Funktion aufruft.

    kannst du mal eine Beispielseite online stellen, evtl. auch bei http://jsfiddle.net/

    Gruß Jürgen

    PS Was hat dein Problem mit Datenbanken zu tun?

    1. Hallo,

      das leidige Thema IE...

      welcher?

      Ich habe eine funktion, die mit innerHTML text tauscht.

      Dazu einen Button der die Funktion aufruft.

      kannst du mal eine Beispielseite online stellen, evtl. auch bei http://jsfiddle.net/

      Gruß Jürgen

      PS Was hat dein Problem mit Datenbanken zu tun?

      ich bin ausversehen auf den Tag gekommen scheinbar.

      http://jsfiddle.net/#&togetherjs=CoAnGxebzO Ist das so richtig mit dem jsfiddle collab?

      Wir nutzen den IE11

      1. Tach!

        Bitte nur die Teile zitieren, auf die du dich konkret beziehst und nicht das gesamte Posting.

        PS Was hat dein Problem mit Datenbanken zu tun?

        ich bin ausversehen auf den Tag gekommen scheinbar.

        Ich hab den Tag mal entfernt.

        dedlfix.

        1. Hallo,

          Ich hab den Tag mal entfernt.

          um Himmels Willen, was hast du dir dabei gedacht?
          Du kannst doch nicht einfach so Tage entfernen!

          *scnr*
           Martin

          1. um Himmels Willen, was hast du dir dabei gedacht?
            Du kannst doch nicht einfach so Tage entfernen!

            Es gibt aber immer wieder welche, die tatsächlich weg könnten ;)

          2. Hallo,

            um Himmels Willen, was hast du dir dabei gedacht?
            Du kannst doch nicht einfach so Tage entfernen!

            wo die doch sowieso schon immer kürzer werden...

            Gruß
            Kalk

            1. Hallo Tabellenkalk,

              wo die doch sowieso schon immer kürzer werden...

              nö, länger.

              Bis demnächst
              Matthias

              --
              Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
              1. Hallo Matthias,

                ich glaub, ich muss doch nochmal wieder den alten Doppelposting-Vermeide-Trick einbauen. Lass mich raten: flaky Mobil-Verbindung?

                LG,
                CK

                1. Hallo Christian Kruse,

                  ich glaub, ich muss doch nochmal wieder den alten Doppelposting-Vermeide-Trick einbauen. Lass mich raten: flaky Mobil-Verbindung?

                  Ja, aber mir ist das nicht mal aufgefallen.

                  Bis demnächst
                  Matthias

                  --
                  Das Geheimnis des Könnens liegt im Wollen. (Giuseppe Mazzini)
  2. Hallo

    Ich kann dir zwar im Moment nicht sagen warum, aber der Internet Explorer scheint ein Problem mit dem Funktionsbezeichnerlanguage‘ innerhalb des Attributhandlers zu haben.

    Mit einem anderen Bezeichner sollte es also funktionieren.

    Allerdings würde ich ohnehin dringend anraten, JavaScript und HTML nicht zu vermischen und statt dessen deinen Event-Handler direkt im Script zu registrieren, vorzugsweise mittels der Methode addEventListener, wobei du dir die Referenz auf eine externe Funktion auch sparen kannst.

    Darüber hinaus würde ich auch empfehlen, wenn es nur um den Austausch von textuellem Inhalt geht, statt innerHTML direkt textContent anzusprechen:

    var button = document.getElementById('myButton'), lang = 1;
    
    button.addEventListener('click', function ( ) {
      if (lang === 1) {
        S1.textContent = 'text1';
        // ...
        lang = 2;
      } else {
        S1.textContent = 'text2';
        // ...
        lang = 1;
      }
    });
    

    Auch ist es nicht besonders sinnvoll, bei jedem Funktionsaufruf das DOM erneut nach den zu manipulierenden Elementen zu durchsuchen, sprich, es wäre besser dies nur einmal zu tun und die zurückgegebenen Objekte in einem Array zu hinterlegen:

    var elements = [ ], i;
    
    for (i = 1; i <= 24; i += 1) {
      elements.push(document.getElementById('S' + i));
    }
    

    Über dieses Array könntest du dann innerhalb deiner Handler-Funktion mittels forEach iterieren.

    Grundsätzlich sei allerdings noch angemerkt, dass der Ratschlag, HTML und JavaScript nicht zu vermischen natürlich auch andersherum gilt, das heißt, es wäre wahrscheinlich besser, statt die textuellen Inhalte in JavaScript zu setzen, diese Inhalte im HTML vorzuhalten, und es sollte, wenn es um Sprachen geht, auch das lang-Attribut für die Elemente dann entsprechend gesetzt werden.

    Gruß,

    Orlok

    1. Ich kann dir zwar im Moment nicht sagen warum, aber der Internet Explorer scheint ein Problem mit dem Funktionsbezeichnerlanguage‘ innerhalb des Attributhandlers zu haben.

      Mit einem anderen Bezeichner sollte es also funktionieren.

      Ok, danke, das hilft erstmal weiter! Lustigerweise hats anfangs aber funktioniert. Auf einmal jetzt nichtmehr. Naja, IE halt.

      Allerdings würde ich ohnehin dringend anraten, JavaScript und HTML nicht zu vermischen und statt dessen deinen Event-Handler direkt im Script zu registrieren

      cool, danke! Werde ich mir definitiv mal ansehen!

      Darüber hinaus würde ich auch empfehlen, wenn es nur um den Austausch von textuellem Inhalt geht, statt innerHTML direkt textContent anzusprechen:

      Wusste ich auch nicht dass das geht :) Danke!

      Danke für die Super hilfe!