webForumDet fria alternativet

Felmeddelande vid focus()

7 svar · 334 visningar · startad av basjonne

basjonneMedlem sedan okt. 200524 inlägg
#1

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
#2

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).

basjonneMedlem sedan okt. 200524 inlägg
#3

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
#4

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();
	}
}

:)

basjonneMedlem sedan okt. 200524 inlägg
#5

Ja, det är ju mkt enklare och snyggare. :)
Men tyvärr blir det samma resultat... :l

Peter SMedlem sedan dec. 20025 483 inlägg
#6

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. :)

basjonneMedlem sedan okt. 200524 inlägg
#7

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
#8

Du borde ändå kunna använda min senast föreslagna funktion:

setFocus(document.getElementById("inquiry"), newElement.id);
130 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)