onClick Funktionsaufrufzuweisung frisst String aus Objekt nicht
Scorp_
- javascript
Hallo miteinander!
Der Betreff sollte ja schon ordentlich Verwirrung gestiftet haben. :)
Ich erstelle dynamisch eine Homepage zur Berechnung einiger Werte für ein Spiel, um die Daten besser handzuhaben habe ich Objekte mit den entsprechenden Werten erzeugt. Diese Objekte werden in einem Array gespeichert und nacheinander an eine Funktion, zur Erzeugung der entsprechenden Div-Elemente, übergeben.
In diesem Fall haben die einzelnen Div-Elemente eine onClick Funktion zugewiesen bekommen, die ihr Erscheinungsbild beeinflussen. Da die einzelnen Objekte voneinander abhängig sind und somit auch die Visualisierung der einzelnen Div-Elemente beeinflussen, habe ich die Variable 'requ' eingeführt, die an den onClick-Handler mit übergeben werden muss.
Mein Problem ist, dass der onClick-Handler den Wert von 'requ' nicht kennt und daher von vorne herein nicht ausgeführt wird.
Hier ist der Code:
// Objekte
refining = new skill({
name: 'Refining Skill',
link: 'RefiningSkill'
});
processing = new skill({
name: 'Processing Skill',
link: 'ProcessingSkill',
requ: 'Refining'
});
// Konstruktor
function skill(a){
this.name = a.name;
this.link = a.link;
this.requ = a.requ;
}
// Array mit Objekten
var allSkillsArr = new Array(refining, processing);
// Kindfunktion 2
function handleSkillBoxes(element, box, requ){
alert('Wird ausgefuert' + requ); //!! Hier liegt das Problem, fuer refining ist der Rueckgabewert undefined, fuer processing ist requ nicht bekannt und die Funktion wird nicht aufgerufen.
var div = element.parentNode;
if(box == 'Box1'){
if(div.value < 1){
div.value = 1;
//...
} else if(div.value >= 1){
div.value = 0;
//...
}
}
else if(box == 'Box2'){
if(div.value < 2){
div.value = 2;
//...
} else if(div.value >= 2){
div.value = 1;
//...
}
}
if(requ == 'Refining' && document.getElementById('Refining').value < 2){
handleSkillBoxes(document.getElementById('Refining').getElementsByTagName("div")[0], 'Box2', '');
}
}
// Kindfunktion 1
function createSkillRow(skillName){
var div = document.createElement("div");
div.id = skillName.link;
div.value = 0;
document.body.appendChild(div);
var parent = div;
div = document.createElement("div");
div.setAttribute('onClick','handleSkillBoxes(this, "Box1", '+skillName.requ+');');
parent.appendChild(div);
div = document.createElement("div");
div.setAttribute('onClick','handleSkillBoxes(this, "Box2", '+skillName.requ+');');
parent.appendChild(div);
var span = document.createElement("span");
span.innerHTML = skillName.name;
parent.appendChild(span);
}
// Initial Funktionsaufruf
for(var i = 0; i < allSkillsArr.length; i++){
createSkillRow(allSkillsArr[i]);
}
Ich habe auch bereits statt div.setAttribute(...), div.onClick = function(){...} versucht, leider ohne Erfolg.
Ich denke die Lösung des Problem ist eine Banalität, leider fällt diese mir aber nicht auf.
Danke euch, dass ihr euch Zeit nehmt. :)
Ich denke die Lösung des Problem ist eine Banalität, leider fällt diese mir aber nicht auf.
Ja, der Handler wird komplett kleingeschrieben
div.onclick = function(){
handleSkillBoxes(this, "Box2", skillName.requ);
};
Struppi.
»» Ich denke die Lösung des Problem ist eine Banalität, leider fällt diese mir aber nicht auf.
Ja, der Handler wird komplett kleingeschrieben
div.onclick = function(){
handleSkillBoxes(this, "Box2", skillName.requ);
};
>
> Struppi.
Ohje, case sensitive ist schon was schönes..
Danke dir für die schnelle und banale Antwort! :(
Trotzdem würde mich intressieren, warum er meinen ersten Ansatz mit `div.setAttribute('onclick','handleSkillBoxes(this, "Box2", '+skillName.requ+');');`{:.language-javascript} nicht wollte.
Hi,
Trotzdem würde mich intressieren, warum er meinen ersten Ansatz mit
div.setAttribute('onclick','handleSkillBoxes(this, "Box2", '+skillName.requ+');');
nicht wollte.
im IE oder in richtigen Browsern?
Cheatah
im IE oder in richtigen Browsern?
Cheatah
Sowohl im FF als auch in Opera. :P
»» im IE oder in richtigen Browsern?
»»
»» CheatahSowohl im FF als auch in Opera. :P
Ich bins nochmal, mein Ansatz hätte mit:
div.setAttribute('onclick','handleSkillBoxes(this, "Box2", "'+skillName.requ+'");');
funktioniert, ich bleib jetzt aber bei der annonymen Funktion, wie ihr mir geraten habt. :)
Danke nochmal für die Hilfe und man hört von sich!
der Scorp_