PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Iframe ja focus
Postitaja: joker 2010-08-30 13:55:42
Käivitan lingiga ekraani keskele IFRAME, ning viin focuse IFRAME uue formi esimesele elemendile.

JS (akna avamine):

$("#GB_window").append("<iframe id='GB_frame' class='GB_iframe' frameborder='0' src='"+url+"'></iframe>");

//Fookus akna esimesele elemendile
setTimeout(function() { $("input[type='text']:first").focus(); }, 25);


Sulgen IFrame Iframe sees oleva lingiga mis viitab scriptile:

JS (akna sulgemine):

window.parent.location.reload(true);


Asi töötab ilusasti.

Samas probleem - kuidas focus viia tagasi esimesele aknale?!

Proovisin:

Variant A. setTimeout(function() { $("input[type='text']:first", window.parent).focus(); }, 30);

Variant B. window.parent.location.focus();


... kuid tulutult.

Täpsustus: kasutan Mozilla Firefoxi.

Viimati muudetud: 30-08-2010 14:07:26
Muutja: joker
Põhjus:

RE: Iframe ja focus
Postitaja: blaa 2010-08-30 14:57:37
<a href="#" onclick="window.opener.focus();window.close();return false;">Sulge see aken ja aktiveeri parent</a>
RE: Iframe ja focus
Postitaja: joker 2010-08-30 16:59:31
Asi ei toimi ikka, ning mõistus täitsa otsas...

Script, mis käivitab IFRAME on järgmine:

var GB_ANIMATION = false;
var GB_DONE = false;
var GB_HEIGHT = 400;
var GB_WIDTH = 400;

function GB_show(caption, url, width, height) {
GB_HEIGHT = height || 400;
GB_WIDTH = width || 400;
if(!GB_DONE) {
$(document.body)
.append("<div id='GB_overlay'></div><div id='GB_window'><div id='GB_caption'></div>"
+ "<img src='images/close.gif' alt='Close'/></div>");
$("#GB_window img").click(GB_hide);
$("#GB_overlay").click(GB_hide);
$(window).resize(GB_position);
GB_DONE = true;
}

$("#GB_frame").remove();
$("#GB_window").append("<iframe id='GB_frame' class='GB_iframe' frameborder='0' src='"+url+"'></iframe>");

$("#GB_caption").html(caption);
$("#GB_overlay").show();
GB_position();

if(GB_ANIMATION)
$("#GB_window").slideDown("slow");
else
$("#GB_window").show();
}

function GB_hide() {
$("#GB_window,#GB_overlay").hide();
}

function GB_position() {
var de = document.documentElement;
var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
var h = self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
$("#GB_window").css({width:GB_WIDTH+"px",height:GB_HEIGHT+"px",
left: ((w - GB_WIDTH)/2)+"px", top: ((h - GB_HEIGHT)/2)+"px" });
$("#GB_frame").css("height",GB_HEIGHT - 32 +"px");
}


HTML, mis käitivab scripti on järgmine:

Aken 1.<<a href="#" onClick="GB_show('Test', http://www.pri.ee)">OpenWindow</a>


http://www.pri.ee aga sisaldab koodi:

Aken 2.<a href="#" onClick="Close();">Close Window</a>
<script type="text/javascript">
var Close() = function()
{window.parent.location.reload(true);}
</script>


Akna 2 sulgemisel Reload refreshib akna 1 vormi (tegemist on popupiga), kuid focust antud lehele ei pane pane katsetades üht või teist eepool nimetatud varianti.

Viimati muudetud: 30-08-2010 17:06:11
Muutja: joker
Põhjus:

RE: Iframe ja focus
Postitaja: blaa 2010-08-30 17:31:30
window.opener.focus();
see toimib, kas sa proovisid ka?

kas parentit peab reloadima?
siis teed

window.opener.loation = ....;
window.opener.focus();
window.close();
RE: Iframe ja focus
Postitaja: joker 2010-08-30 21:55:29
Lehekülg A. asub POPUPis mille sees avan omakorda IFRAMEga lehekülje B. Leheküljelt B loen javascriptiga andmeid kasutade parentit leheküljelt A.

Lehekülje A. avan koodiga:
popup[name] = window.open(url, name, options);
popup[name].focus();


Proovisin peale B.html sulgemist:
window.parent.GB_hide();
alert (window.location.href);

Annab tulemuseks lehekülje B.html.

Proovisin:
window.parent.GB_hide();
alert (window.parent.location.href);

See annab tulemuseks lehekülje A.html.

Kui kasutada window.close(), siis suletakse nii A kui B aken, kuid mul on vaja, et jätkatakse tööprotsessi aknas B.

Kui kasutada window.opener.focus(), siis antakse veateade Viga: window.opener is null.

Viimati muudetud: 30-08-2010 22:05:29
Muutja: joker
Põhjus:

RE: Iframe ja focus
Postitaja: joker 2010-08-31 09:48:32
Parandus eelmisele tekstile: Kui kasutada window.close(), siis suletakse nii A kui B aken, kuid mul on vaja, et jätkatakse tööprotsessi aknas A.
RE: Iframe ja focus
Postitaja: blaa 2010-08-31 10:50:45
ei saa aru, mis sul häda on

klikid "freim" avaneb A, klikid selles "freim" avaneb B.
"sulge", sulgub B ja fookuse saab A

PHP kood:
 <html>
<
body>

<
a href="#" onclick="window.setTimeout('document.getElementById('esimene').select();document.getElementById('esimene').focus();', 1000);window.open('freim.htm', '', 'width=400,height=500');return false;">Freim</a>

<
a href="#" onclick="window.opener.focus();window.close();return false;">Sulge</a>

<
input type="text" id="esimene" />

</
body>
</
html>
RE: Iframe ja focus
Postitaja: joker 2010-09-01 16:12:04
Blaa, ma miski pärast arvan, et räägime erinevatest asjadest.

Vaata näidet: http://www.intopia.eu/test/

Miks ma seda fookust nii taga ajan - aknas A peaks toimima mingid tegevused kui klahvidele vajutada (antud juhul siis vajutades klahvile F2). Kui aga fookust tagasi ei tule hiljema antud aknale aknast B, siis klahvid ei toimi.

Antud näites on ka näha, et kui sulgeda IFRAME klahviga ESC, siis hiljem aknas A klahv F2 enam ei toimi - st. aken pole enam fookuses.

PS! Klahvid töötavad Mozillaga.

Viimati muudetud: 01-09-2010 16:30:05
Muutja: joker
Põhjus:

RE: Iframe ja focus
Postitaja: blaa 2010-09-01 17:49:40
TSITEERITUD:

Antud näites on ka näha, et kui sulgeda IFRAME klahviga ESC, siis hiljem aknas A klahv F2 enam ei toimi - st. aken pole enam fookuses.

kusjuures mul firefoxiga f2 toimib peale esc-i

Sain valesti aru jah, ajasin freimi ja popupi segi.

Aga miks üldse peab seal freim olema? Pane tavaline div. Toimetad ajaxiga.
RE: Iframe ja focus
Postitaja: joker 2010-09-01 18:14:02
Mul enda arvutis Firefox 3.6.8.

Proovisin DIViga, kuid siis tekkisid muud komplikatsioonid - pean hakkama keelama ja ohjeldama teatuid shortcute akna B kuvamisel. Näide: CTRL + S salvestab akna A sisu. Kui nüüd kuvada B, siis pean kontrollima, missugust vormi pean salvestama ja missugust mitte.

Jõudsin järeldusele, et IFRAME on antud situatsioonis parim lahendus, ning vaeva kõige vähem.

IFRAME kasutuselevõtul töötas kõik laitmatult kuni avastasin focus probleemi ... ;o(

Viimati muudetud: 01-09-2010 18:17:52
Muutja: joker
Põhjus:

RE: Iframe ja focus
Postitaja: blaa 2010-09-01 23:51:57
No üks on selge, brauseris sa vindõusi täielikult ei emuleeri.
Alati on mingid klahvid, skrollid, brauseri bugid ja pluginad, mis su töö fustreerivaks teevad.
Ma arvan, et kasuta popupi, vähem jamasid.
RE: Iframe ja focus
Postitaja: joker 2010-09-03 14:06:41
Panin asja BUGina Mozilla leheküljele üles.
Vaatame, kas lahendavad asja järgmises versioonis ära ,o)

Viimati muudetud: 03-09-2010 14:06:54
Muutja: joker
Põhjus:

RE: Iframe ja focus
Postitaja: joker 2011-05-20 12:18:42
Ehh, lõpuks jõudis mõistus kohale, kuidas asi lahendada ;o)

setTimeout("$("input[type='text']:first", window.parent.document).focus();",100);

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.10770201683