webForumDet fria alternativet

Focus till createPopup()

10 svar · 376 visningar · startad av Web-Tor

Web-TorMedlem sedan nov. 200011 794 inlägg
#1

När man öppnar "Meny 1" skulle jag vilja att focus hamnar i popup:en så att när man tycker på TAB så markeras "Rad 2".

Finns det något sätt att fixa detta?

<script>
var objPop=window.createPopup();
var objPopBody=objPop.document.body;
function pop(element){
	objPopBody.innerHTML=element.nextSibling.nextSibling.innerHTML;
	objPopBody.style.border="solid black 1px";
	objPop.show(50,50,150,100,document.body);
}
</script>

<a href="#" onclick="pop(this)">Meny 1</a><br>
<div id="cont" style="display:none;">
	<a href="#">Rad 1</a><br/>
	<a href="#">Rad 2</a><br/>
	<a href="#">Rad 3</a>
</div>

<a href="#" onclick="pop(this)">Meny 2</a><br>
<div id="cont" style="display:none;">
	<a href="#">Rad 4</a><br/>
	<a href="#">Rad 5</a><br/>
	<a href="#">Rad 6</a>
</div>
nitro2k01Medlem sedan aug. 20037 630 inlägg
#2
function pop(element){
objPopBody.innerHTML=element.nextSibling.nextSibling.outerHTML;
objPopBody.style.border="solid black 1px";
objPop.show(50,50,150,100,document.body);

menuinPop=objPop.window.document.getElementById(element.nextSibling.nextSibling.id);
menuinPop.style.display="block";
menuinPop.firstChild.focus();
}

Obs! 1) Med denna kod får inte divarna ha samma id! (Det ska de ändå inte ha)
2) Observera outerHTML på första raden i funktionen.
Ska för övrigt inte nextSibling bytas ut mot nextSibling() (Inte säker själv)

Web-TorMedlem sedan nov. 200011 794 inlägg
#3

1. Jo, divarna ska ha olika id (klipp-och-klistra fel ;)).

Får inte din kod att funka:

objPop.window.document is null or not an object

På raden:

menuinPop=objPop.window.document.getElementById(element.nextSibling.nextSibling.id);
Web-TorMedlem sedan nov. 200011 794 inlägg
#4

Det är kanske så här du tänkte:

<script>
var objPop=window.createPopup();
var objPopBody=objPop.document.body;
function pop(element){
	objPopBody.innerHTML=element.nextSibling.nextSibling.outerHTML;
	objPopBody.style.border="solid black 1px";
	objPop.show(50,50,150,100,document.body);

	menuinPop=objPop.document.getElementById(element.nextSibling.nextSibling.id);
	menuinPop.style.display="block";
	menuinPop.firstChild.focus();
}

</script>

<a href="#" onclick="pop(this)">Meny 1</a><br>
<div id="cont1" style="display:none;">
	<a href="#">Rad 1</a><br/>
	<a href="#">Rad 2</a><br/>
	<a href="#">Rad 3</a>
</div>

<a href="#" onclick="pop(this)">Meny 2</a><br>
<div id="cont2" style="display:none;">
	<a href="#">Rad 4</a><br/>
	<a href="#">Rad 5</a><br/>
	<a href="#">Rad 6</a>
</div>

...men det funkar inte. Trycker man TAB efter att man öppnat Meny1 så går den till Meny 2.

nitro2k01Medlem sedan aug. 20037 630 inlägg
#5

Aha, felet ligger i window.createPopup(), tydligen vägrar den under några omständigheter att ett objekt i den får fokus. Inte ens när jag lade till en inputbox och klickade manuellt i den, så ville den acceptera att den fick fokus. Mitt råd är att öppna din popup på annat sätt.

Web-TorMedlem sedan nov. 200011 794 inlägg
#6

Jag var rädd för att det inte skulle funka. :(

nitro2k01 skrev:

Mitt råd är att öppna din popup på annat sätt.

Nåt tips på hur man får en popup att ligga över flera frames. ;)

nitro2k01Medlem sedan aug. 20037 630 inlägg
#7

Mitt tips är att använda en vanlig popup, alltså window.open.

<script>

function pop(element){
	var objPop = window.open("empty.html","popwindow","resizable=1,left=" + (event.screenX+10) + ",top=" + (event.screenY+10) + ",width=100,height=150,scrollbars=0,directories=0,location=0,menubar=0,status=0,toolbar=0")
	objPop.moveTo(event.screenX+10, event.screenY+10);

	var objPopBody=objPop.document.body;
	objPopBody.innerHTML=element.nextSibling.nextSibling.outerHTML;
	objPopBody.style.border="solid black 1px";

	menuinPop=objPop.document.getElementById(element.nextSibling.nextSibling.id);
	menuinPop.style.display="block";
	menuinPop.firstChild.focus();

}

</script>

<a href="#" onclick="pop(this)">Meny 1</a><br>
<div id="cont1" style="display:none;">
<a href="#">Rad 1</a><br/>
<a href="#">Rad 2</a><br/>
<a href="#">Rad 3</a>
</div>

<a href="#" onclick="pop(this)">Meny 2</a><br>
<div id="cont2" style="display:none;">
<a href="#">Rad 4</a><br/>
<a href="#">Rad 5</a><br/>
<a href="#">Rad 6</a>
</div>
Web-TorMedlem sedan nov. 200011 794 inlägg
#8

Hmm...
Jag får upp ett nytt litet fönster men inget innehåll?
http://member.webforum.nu/1123/pop2.html

nitro2k01Medlem sedan aug. 20037 630 inlägg
#9

Oh, problemet ligger nog i att du inte har skapat ett dokument som heter empty.html, det kanske jag skulle ha sagt. Av någon andledning så gillade inte IE about:blank, så det fick bli ett nytt tomt dokument.

Web-TorMedlem sedan nov. 200011 794 inlägg
#10

Men tanken är alltså att det ska dyka upp ett nytt fönster med ramar, knappar och hela köret?

nitro2k01Medlem sedan aug. 20037 630 inlägg
#11

Ja i princip.
Du kan experimentera med att sätta fullscreen=1, möjligen i kombination med channelmode=1. Då slipper du ramen. Dock så verkade det då inte gå att ändra storlek på fönstret. Jag vet dock att jag har lyckats med detta förr. Kanske en av MS' "säkerhetsuppdateringar"...

/r Bekräftat att det inte funkar, stängde dock fönstret med källan. Men du kan lita på mig :)

window.open("empty.html","popwindow","fullscreen=1,channelmode=1,resizable=1,...
Genererad på 363 ms · cache AV · v20260730165559-full.f96bc7eb