is null Fehler und Exception
Astrid
- javascript
0 Blubb
Hallo allerseits,
ich möchte in einem Dokument mit den Pfeiltasten navigieren: bei Pfeil hoch soll der Cursor in das erste InputFeld des letzten Geschwister-divs springen und bei Pfeil runter entsprechend in das erste InputFeld des nächsten Geschwister-divs. Wenn es kein Input gibt, soll der Cursor ins erste Textarea springen. Beim Laden der Seite wird der Cursor mit einer anderen Funktion zuerst ins erste Input auf der Seite gesetzt. Das wäre dann praktisch der Ausgangspunkt.
Das funktioniert auch so weit, nur, wenn ich im letzten Feld nochmal die Pfeil runter Taste drücke, bekomme ich den Fehler "sibling ist null". Wenn ich dann noch öfter die Pfeiltaste drücke, bekomme ich sogar die Exception: "cannot modify properties of WrappedNative". Leider bin ich ziemlich unbedarft in JavaScript: kann mir jemand einen Tipp geben, wie man beides abfangen kann?
Hier mein Code:
addLoadEvent(jumpInForm);
function getKeyCode(event) {
event = event || window.event;
return event.keyCode;
}
function jumpInForm() {
if(document.getElementById("patient")){
var patientForm = document.getElementById('patient');
patientForm.onkeydown = function(event) {
var charCode = getKeyCode(event);
divs = document.getElementsByTagName("div");
var parent = document.activeElement.parentNode; //Elternelement von aktuellem
while(parent.className.indexOf("formrow")< 0 ){
parent = parent.parentNode;
}
if(charCode == 40){ //Pfeil runter
var sibling = parent.nextSibling; //nächstes Geschwister von Elternelement
while(sibling.nodeType!=1){
if(sibling != null){
sibling=sibling.nextSibling;
}
}
}else if(charCode == 38){//Pfeil hoch
var sibling = parent.previousSibling; //letztes Geschwister von Elternelement
while(sibling.nodeType!=1){
if(sibling != null){
sibling=sibling.previousSibling;
}
}
}
if(sibling.getElementsByTagName("input").length >0){ //erstes Input type text von Geschwister, falls vorhanden
var siblingInputs = sibling.getElementsByTagName("input").length;
for(i = 0; i < siblingInputs; i++){
if(sibling.getElementsByTagName("input")[i].type=="text"){
sibling.getElementsByTagName("input")[i].focus();
break;
}
}
}else if(sibling.getElementsByTagName("textarea").length >0){ //ansonsten erstes textarea von Geschwister, falls vorhanden
var siblingInputs = sibling.getElementsByTagName("textarea").length;
for(i = 0; i <= siblingInputs; i++){
sibling.getElementsByTagName("textarea")[i].focus();
break;
}
}
}
}
}
Vielen Dank im Voraus!
Astrid
Hallo,
Das funktioniert auch so weit, nur, wenn ich im letzten Feld nochmal die Pfeil runter Taste drücke, bekomme ich den Fehler "sibling ist null".
In welcher Zeile denn genau? Installiere dir mal Firebug, der sagt einem ziemlich genau wo was nicht klappt.
Du versuchst mit:
var sibling = parent.nextSibling;
auf das nächste Element zuzugreifen - wo ist die Abfrage, wenn es dieses Element nicht gibt und folglich die while-Schleife mit 'sibling.irgendwas' ins leere greift? Ebenso bei previousSibling.
Grüße