setAttributNode funktioniert nur 1x
ctx
- javascript
Guten Tag liebe Community,
ich habe folgendes Problem:
SourceCode-Ausschnitt:
druck = document.createAttribute("onkeyup");
druck.value = "Eingabe()";
formular.eingabe1.setAttributeNode(druck);
formular.eingabe2.setAttributeNode(druck);
formular.eingabe3.setAttributeNode(druck);
formular.eingabe4.setAttributeNode(druck);
Die erste Anweisung mit ~~~javascript setAttributeNode(druckGraph);
Mit "Mozilla Firebug" gibt er aus: "InUseAttributeError: Attribute already in use".
Ich möchte mit setAttributeNode alle <input> felder mit dem einen attribut ergänzen. Bsp:
~~~html
<input name="eingabe1" onkeyup="Eingabe" />
<input name="eingabe2" onkeyup="Eingabe" />
<input name="eingabe3" onkeyup="Eingabe" />
<input name="eingabe4" onkeyup="Eingabe" />
Problem- und Lösungs-Ansätze und Vorschläge sind sehr erwünscht
lg
ctx
PS.: Logopädie Patient
Hi,
druck = document.createAttribute("onkeyup");
druck.value = "Eingabe()";
Du hast also genau 1 Attribut.
Und versuchst, das 4mal zu verwenden.
formular.eingabe1.setAttributeNode(druck);
formular.eingabe2.setAttributeNode(druck);
formular.eingabe3.setAttributeNode(druck);
formular.eingabe4.setAttributeNode(druck);
Mit "Mozilla Firebug" gibt er aus: "InUseAttributeError: Attribute already in use".
Da steht's doch: Du versuchst, dasselbe Attribut wiederzuverwenden.
Erzeuge 4 gleiche Attribute, statt 4mal dasselbe Attribut zu verwenden.
cu,
Andreas
Hi,
druck = document.createAttribute("onkeyup");
druck.value = "Eingabe()";Du hast also genau 1 Attribut.
Und versuchst, das 4mal zu verwenden.
formular.eingabe1.setAttributeNode(druck);
formular.eingabe2.setAttributeNode(druck);
formular.eingabe3.setAttributeNode(druck);
formular.eingabe4.setAttributeNode(druck);Mit "Mozilla Firebug" gibt er aus: "InUseAttributeError: Attribute already in use".
Da steht's doch: Du versuchst, dasselbe Attribut wiederzuverwenden.
Erzeuge 4 gleiche Attribute, statt 4mal dasselbe Attribut zu verwenden.
cu,
Andreas
Hallo Adreas,
ok verstanden. Danke Dir.also ich kann dieses "druck" nicht auf alle anwenden sonder muss es immer wieder neu deinieren. eventuell mit ner For-Schleife drüber sausen?
Sorry, ich hab das erste mal in JS dieses Element setAttributNode() verwendet, daher bin ich diezbezüglich etwas unerfahren.
Geht es einfacher, simpler und eleganter? Danke im voraus.
LG
Habs jetzt gelöst, ich bin ner FOR schleife drüber gelaufen. finde ich n bisschen umständlich aber immer hin klapps. nochmal dank für das Aufzeigen
grüß
Lieber ctx,
Habs jetzt gelöst, ich bin ner FOR schleife drüber gelaufen.
bitte nicht! Du willst ja kein Attribut hinzufügen...
finde ich n bisschen umständlich
Genau genommen ist es sogar grober Unfug!
aber immer hin klapps.
Na, hoffentlich kommst Du nochmal wieder und liest das noch...
Liebe Grüße,
Felix Riesterer.
Lieber ctx,
druck = document.createAttribute("onkeyup");
druck.value = "Eingabe()";
ganz offensichtlich willst Du bei einem "keyup"-Ereignis eine Funktion ausführen lassen. Dazu notierst Du kein "onkeyup"-Attribut über den Umweg von JavaScript. Das wäre "von hinten durch die Brust ins Auge" und streng genommen Unsinn.
Warum notierst Du nicht etwas in der folgenden Art?
~~~javascript
var myEl = document.getElementById("meine-id");
// nur wenn gefunden
if (myEl) {
myEl.onkeyup = function () {
Eingabe(); // Funktion ausführen
}
}
Näheres findest Du hier im Wiki: JavaScript/Event-Handler
Liebe Grüße,
Felix Riesterer.
@@Felix Riesterer:
nuqneH
if (myEl) {
myEl.onkeyup = function () {
Eingabe(); // Funktion ausführen
}
Das ist streng genommen auch Unsinn.
[molily erklärt](http://molily.de/js/event-handling-fortgeschritten.html) warum und was man stattdessen tut.
Qapla'
PS: Und wo ist nun dieser Nicht-hilfreich-Button?
--
„Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
Lieber Gunnar Bittersmann,
Du hast natürlich recht, aber wenn man sich anschaut, auf welchem Verständnisniveau sich der OP befindet, ist Dein Hinweis zu früh. Außerdem bin ich mir ziemlich sicher, dass der OP so schnell nicht wieder kommt und das hier ohnehin nicht mehr liest.
Liebe Grüße,
Felix Riesterer.
@@Felix Riesterer:
nuqneH
Du hast natürlich recht, aber wenn man sich anschaut, auf welchem Verständnisniveau sich der OP befindet, ist Dein Hinweis zu früh.
Es ist nie zu früh.
„Es gibt für alles zwei Zeitpunkte, den richtigen und den verpassten.“
(Sten Nadolny in „Die Entdeckung der Langsamkeit“)
Jemandem einen Weg weisen, um ihn später wieder davon abzubringen, funktioniert nicht wegen „Das hab ich doch schon immer so gemacht“.
Außerdem bin ich mir ziemlich sicher, dass der OP so schnell nicht wieder kommt und das hier ohnehin nicht mehr liest.
Da bin ich mir bei ctx nicht sicher. Der ist öfter hier.
Qapla'
Lieber Gunnar Bittersmann,
Es ist nie zu früh.
doch. Pauschal eben wieder mal falsch.
„Es gibt für alles zwei Zeitpunkte, den richtigen und den verpassten.“
(Sten Nadolny in „Die Entdeckung der Langsamkeit“)
Aha. Wikipedia dazu:
Protagonist ist der englische Kapitän und Polarforscher John Franklin, der wegen seiner Langsamkeit immer wieder Schwierigkeiten hat, mit der Schnelllebigkeit seiner Zeit Schritt zu halten,
Man darf also frei interpretieren inwiefern Dein Argument überhaupt ein Gewicht hat.
Jemandem einen Weg weisen, um ihn später wieder davon abzubringen, funktioniert nicht wegen „Das hab ich doch schon immer so gemacht“.
Aha. Aber einen hochkomplexen Sachverhalt kannst Du ohne Simplifizierung erfolgreich vermitteln, auch wenn Deinem Gegenüber ganz offensichtlich wesentliche Grundlagen fehlen. Das habe ich an Dir schon immer sehr bewundert.
Da bin ich mir bei ctx nicht sicher. Der ist öfter hier.
Na, denn is man jut.
Liebe Grüße,
Felix Riesterer.
@@Felix Riesterer:
nuqneH
Es ist nie zu früh.
doch. Pauschal eben wieder mal falsch.
„Es gibt drei Zeitpunkte, einen richtigen, einen verpassten und einen verfrühten.“
(Sten Nadolny in „Die Entdeckung der Langsamkeit“)
Aha. Aber einen hochkomplexen Sachverhalt kannst Du ohne Simplifizierung erfolgreich vermitteln,
Einen Sachverhalt anders darzustellen ist etwas anderes als einen Sachverhalt vereinfacht darzustellen.
auch wenn Deinem Gegenüber ganz offensichtlich wesentliche Grundlagen fehlen.
Wesentliche Grundlagen fehlen, wenn man diese seinem Gegenüber gegenüber verschweigt.
Qapla'
Lieber Gunnar Bittersmann,
:-) *YMMD*
„Es gibt für alles zwei Zeitpunkte, den richtigen und den verpassten.“
(Sten Nadolny in „Die Entdeckung der Langsamkeit“)
[...]
„Es gibt drei Zeitpunkte, einen richtigen, einen verpassten und einen verfrühten.“
(Sten Nadolny in „Die Entdeckung der Langsamkeit“)
[...]
Wesentliche Grundlagen fehlen, wenn man diese seinem Gegenüber gegenüber verschweigt.
♪♫ *summsel* ♪♫
Liebe Grüße,
Felix Riesterer.
Hallo ihr lieben,
Sorry, war wech (verhindert).
Felix Riester: ich habs gemacht. Seeehr umständlich aber es geht.
Gunnar Bittersmann: ich lese es mir gern durch.
Ich stell das Projekt ins netz. läuft sehr gut auf abwärtskomplatiblem Browsern.
zur Info: ich hab n koordinaten system mit eingabe mathematischen Funktionen (noch polynomen) programmiert und gibt n graphen aus.
läuft überhaupt "cloures" und anonyme Funtionen auf älteren JS-Parsern (drück ich mich korrekt aus?)? Ich hab nicht closures verwendet, ganz zu schweigen von anonymen unktionen und hab nur wenig selbst Objekte initialisiert.
Schöne Grüße,
ctx
Lieber ctx,
Felix Riester: ich habs gemacht. Seeehr umständlich aber es geht.
nein, nicht seeehr umständlich, sondern extrem flexibel. Stell' Dir vor, Du könntest die Funktion "Eingabe" direkt in der Eventhandlerfunktion notieren, da alle die dafür benötigten Variablen bequem im Scope verfügbar sind (siehe auch Tutorial im Wiki). Du könntest auf den Funktionsnamen verzichten, was je nach Projekt die Übersichtlichkeit enorm erhöhen kann!
läuft überhaupt "cloures" und anonyme Funtionen auf älteren JS-Parsern (drück ich mich korrekt aus?)?
Ich habe in einer virtuellen Maschine einen IE6 mit folgendem Code getestet:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
var test = 0;
function _setup () {
var p = document.getElementsByTagName("p");
for (var i = 0; i < p.length; i++) {
p[i].onclick = function () {
test++;
alert("test ist nun "+test);
};
}
}
</script>
</head>
<body onload="_setup();">
<h1>Test</h1>
<p>Nur ein Test...</p>
</body>
</html>
Offensichtlich kann der IE6 mit closures umgehen. Da in dieser virtuellen Maschine auch ein MS Office 2007 installiert ist, weiß ich jetzt nicht, welche Modifikationen an JScript vorgenommen wurden und ob ein "nackter" IE6 auch closures unterstützt.
Ich hab nicht closures verwendet, ganz zu schweigen von anonymen unktionen und hab nur wenig selbst Objekte initialisiert.
Wenn man komplexere Programme schreibt, wird man dieses Sprachkonzept sehr schnell lieben lernen!
Liebe Grüße,
Felix Riesterer.
nein, nicht seeehr umständlich, sondern extrem flexibel.
ich würds ja sehr gern anstellen aber mein Projekt wurde zwangsmäßig geschlossen. ich mach privat weiter und dann komme ich auf das zurück. Danke nochmals
Offensichtlich kann der IE6 mit closures umgehen. Da in dieser virtuellen Maschine auch ein MS Office 2007 installiert ist, weiß ich jetzt nicht, welche Modifikationen an JScript vorgenommen wurden und ob ein "nackter" IE6 auch closures unterstützt.
Ok, nochml danke für die Hilfe. Ich werds bestimmt machen. momentan läuft noch die Dokumentation.
hab über 1300 zeilen quellcode geschrieben natürlich mit kommentaren und in der zukunft privat hunterte mehr.
stells online (um mich für die nachwelt sehr zu blamieren :D)
lg
Mathias
var test = 0;
function _setup () {
var p = document.getElementsByTagName("p");for (var i = 0; i < p.length; i++) {
p[i].onclick = function () {
test++;
alert("test ist nun "+test);
};
}
}
Nur nebenbei, das ist keine [Closure](http://de.wikipedia.org/wiki/Closure) im engeren Sinne sondern einfach ein Zugriff auf eine globale Variable. Hier wird nichts "eingeschlossen".
Wenn du zB innerhalb der onclick Handler "p" verwendest wären sie Closures.
> Offensichtlich kann der IE6 mit closures umgehen.
Ja. Closures sind ein Grundfeature von JS das glaub ich schon ab Netscape 2.0 verfügbar ist. ;-)
MfG
Phil
Nur nebenbei, das ist keine Closure im engeren Sinne sondern einfach ein Zugriff auf eine globale Variable. Hier wird nichts "eingeschlossen".
ich weis das das keine verschachtelten Funktionen sind also kein closure, und ich glaube das meinte Felix auch nicht.
Ja. Closures sind ein Grundfeature von JS das glaub ich schon ab Netscape 2.0 verfügbar ist. ;-)
Dank für die Info! Ich hab auch schon danach gesucht und finds weniger :/.
grüße
ctx