Någon som vet varför jag får detta felmeddelande när jag kör focus?
Fel: [Exception... "'Tillstånd nekades att hämta egenskap XULElement.selectedIndex' when calling method: [nsIAutoCompletePopup::selectedIndex]"
Och så här ser funktionen ut, där id är input-elementets id:
function setFocus(id) {
var formName = document.getElementById(id).parentNode.name;
document.forms[formName].elements[id].focus();
}
Tacksam för svar.
Peter SMedlem sedan dec. 20025 483 inlägg Det har nog att göra med document.getElementById(id).parentNode.name;
Testa att först hämta en referens till objektet, kolla så att det existerar och därefter accessa dess egenskaper:
var elm = document.getElementById(id);
if (elm){
var formName = elm.parentNode.name;
document.forms[formName].elements[id].focus();
}
Du kan behöva göra samma sak med föräldranoden (parentNode-delen).
Tack för snabba svar Peter!
Jag testade att ändra funktionen till följande:
function setFocus(id) {
var elm = document.getElementById(id);
var elmParent = document.getElementById(id).parentNode.id;
if (elm && elmParent){
var formName = elm.parentNode.name;
document.forms[formName].elements[id].focus();
}
}
Men jag vet inte om jag gör rätt med föräldranoden... scriptet funkar dock men jag får samma felmeddelande..
Peter SMedlem sedan dec. 20025 483 inlägg Så kanske:
function setFocus(id){
var elm = document.getElementById(id);
if (elm && elm.parentNode){
var formName = elm.parentNode.name;
document.forms[formName].elements[id].focus();
}
}
:)
Ja, det är ju mkt enklare och snyggare. :)
Men tyvärr blir det samma resultat... :l
Peter SMedlem sedan dec. 20025 483 inlägg Då kanske vi kan göra så här istället:
// anrop
setFocus(this.form, 'id-värde');
function setFocus(frm, id){
frm.elements[id].focus();
}
Om knappen(?) som anropar setFocus() ligger i samma formulär som det element som skall till att få fokus. :)
Tyvärr är det inte riktigt så enkelt. Input-elementet skapas dynamiskt i denna funktion:
function createNewInputObject(element, elementNr) {
elementNr++;
var newElement = document.createElement('input');
newElement.type = 'text';
newElement.className = 'heading';
newElement.name = element + '[' + elementNr + ']';
newElement.id = element + '[' + elementNr + ']';
newElement.setAttribute('onClick', 'selectText(this.id)');
newElement.setAttribute('onKeyPress', 'return submitEnter(this, event, this.id, <?=$iid?>)');
document.getElementById('inquiry').appendChild(newElement);
setFocus(newElement.id);
}
Vill alltså sätta fokus på det element som har skapats i funktionen.
Peter SMedlem sedan dec. 20025 483 inlägg Du borde ändå kunna använda min senast föreslagna funktion:
setFocus(document.getElementById("inquiry"), newElement.id);