ugrás a tartalomhoz

Modal dialog

pilot · 2012. Május. 9. (Sze), 08.55
Sziasztok,

van egy html / js kódom, ami, ha egy linkre kattintunk, feldob egy ablakot. Mindez a modal dialog megoldással történik. (Magyarul sajna nem tudom ennek a nevét). Azt szeretném megoldani, hogy a kis ablakban megadott adatok bekerűljenek a fő részbe. A pop - up ablaknál (mikor egy kölönálló html / php fájl töltődik be a felugró ablakban) ismerem a megoldást, de ennél sehogyan sem boldogulok.

Itt van egy alapkód, a neten találtam. Próbáltam beleilleszteni egy formot, de sehogyan sem akar működni:

<script type="text/javascript">
function overlay() {
	el = document.getElementById("overlay");
	el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
}
</SCRIPT>


<style type="text/css">
#overlay {
     visibility: hidden;
     position: absolute;
     left: 0px;
     top: 0px;
     width:100%;
     height:100%;
     text-align:center;
     z-index: 1000;
	 background-image:url(elemek/semi_transparent1.png);

}


#overlay div {
     width:300px;
     margin: 100px auto;
     background-color: #fff;
     border:1px solid #000;
     padding:15px;
     text-align:center;
}

body {
     height:100%;
     margin:0;
     padding:0;
}

</style>


 
</head> 


<body>

<a href='#' onclick='overlay()'>Click here to show the overlay</a>


<div id="overlay">
     <div>
          <p>Content you want the user to see goes here.</p>
          
          Click here to [<a href='#' onclick='overlay()'>close</a>]
          
     </div>
</div>

</body>
</html>
 
1

Hogyan?

Poetro · 2012. Május. 9. (Sze), 09.53
Először is használj kódszínezőt.
Hogyan próbáltad beilleszteni az űrlapot? Mit jelent az, hogy nem akar működni?
2

Itt a kód: <script

pilot · 2012. Május. 9. (Sze), 12.49
Itt a kód:

<script type="text/javascript">
function overlay() {
el = document.getElementById("overlay");
el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
}
</SCRIPT>


<style type="text/css">
#overlay {
     visibility: hidden;
     position: absolute;
     left: 0px;
     top: 0px;
     width:100%;
     height:100%;
     text-align:center;
     z-index: 1000;
background-image:url(elemek/semi_transparent1.png);
}

#overlay div {
     width:300px;
     margin: 100px auto;
     background-color: #fff;
     border:1px solid #000;
     padding:15px;
     text-align:center;
}

body {
     height:100%;
     margin:0;
     padding:0;
}
</style>
</head>
<body>

<a href='#' onclick='overlay()'>Click here to show the overlay</a>
<?php
  echo $_POST['name'];
 ?>

<div id="overlay">
     <div>
    <FORM id="loginform" method="post" name="reply" form action="overlay2.php">

           <label for="">név </label><BR>
  <INPUT size="10" name="name" id="name"><BR>
           
            <input type="button" value="Mehet" onClick="overlay()"/>
           </FORM>          
     </div>
</div>

</body>
</html>
3

Mi a baj?

Poetro · 2012. Május. 9. (Sze), 13.35
Én úgy látom, hogy az űrlap megjelenik az overlay-ben. Innentől kezdve nem tudom, mi a probléma. Lehet nem jól fogalmaztad meg, mit szeretnél elérni?
4

Igen, lehet hogy nem jól

pilot · 2012. Május. 9. (Sze), 13.55
Igen, lehet hogy nem jól fogalmaztam. Nem az űrlap megjelenítése a problémám, hanem hogy az ott bekért adatot szeretném megjeleníteni a főoldalon, tehát a
echo $_POST['name'];

sorral.
5

elküldés

Poetro · 2012. Május. 9. (Sze), 14.30
Ahhoz előbb el kell küldeni az űrlapot. Mondjuk sima submittal az egész oldal fog frissülni, azaz bekerül az illető változó. Ha ezt nem szeretnéd, akkor bele kell tanulnod az AJAX rejtelmeibe.
6

Köszi a segítséget. Tényleg a

pilot · 2012. Május. 9. (Sze), 14.40
Köszi a segítséget. Tényleg a submit maradt ki.

Üdv.
7

Sziasztok! Még egy

pilot · 2012. Május. 18. (P), 13.13
Sziasztok!

Még egy megoldandó probléma merült fel.

<a href='#' onclick='overlay()'><img src="elemek/egy.gif" /></a>
<a href='#' onclick='overlay()'><img src="elemek/kettő.gif" /></a>


<div id="overlay">
<div>
<p>itt kellene a képeket megjeleníteni</p>

Click here to [<a href='#' onclick='overlay()'>close</a>]


A főoldalon képeket jelenítek meg, amelyekre ha rákattintok, megjelenik az overlay ablak. AZt szeretném megoldani, hogy az a kép, amelyre kattintottunk, megjelenjen az overlay ablakban.
8

re: Sziasztok! Még egy

hNczy · 2012. Május. 18. (P), 16.37
Ha az overlay függvénynek átadnád paraméterben a this-t
<a href='#' onclick='overlay(this)'><img src="elemek/egy.gif" /></a>
<a href='#' onclick='overlay(this)'><img src="elemek/kettő.gif" /></a>
, vagy hogy épp melyik link is az
<a href='#' onclick='overlay("egy")'><img src="elemek/egy.gif" /></a>
<a href='#' onclick='overlay("kettő")'><img src="elemek/kettő.gif" /></a>
, akkor a függvényben már el tudnád dönteni, hogy melyik képet kell használni. Vagy nem ez a probléma?
9

Ha nagyított képet akarsz

pkadam · 2012. Május. 18. (P), 17.13
Ha nagyított képet akarsz (mert általában ez a gyakoribb elképzelés), akkor meg kell adnod a szkriptnek, hogy mi a nagy kép forrása. Például az img rel attribútumában. Tehát így nézne ki:

<script>
function overlay(elem) {
	var newImg = document.createElement('img');
	newImg.src = elem.firstChild.getAttribute('rel');
	var overlay = document.getElementById('overlay');
	overlay.innerHTML='';
	overlay.appendChild(newImg);
}
</script>

<a href='#' onclick='overlay(this)'><img src="elemek/egy.gif" rel="elemek/egy_nagy.gif" /></a>
<a href='#' onclick='overlay(this)'><img src="elemek/ketto.gif" rel="elemek/ketto_nagy.gif" /></a>

<div id="overlay">
<p>itt kellene a képeket megjeleníteni</p>
</div>

Click here to [<a href='#' onclick='overlay()'>close</a>]
Ha mégis ugyanazt a képet akarod az overlay-be rakni, akkor a változás:
newImg.src = elem.firstChild.src;
10

href

Poetro · 2012. Május. 18. (P), 17.21
Vagy ami még szebb, hogy eleve a href attribútumot írod át a nagy kép elérési útvonalára.
13

+1

pkadam · 2012. Május. 19. (Szo), 14.42
És így meg lenne oldva a no-JS fallback is.

Pilot számára a változás:

<a href="egy_nagy.png" onclick="overlay(this);return false;"><img src="egy.png" /></a>
A szkriptben pedig:

newImg.src = elem.href;
11

Részben már OK. Még annyi nem

pilot · 2012. Május. 18. (P), 20.13
Részben már OK. Még annyi nem működik, hogy az overlay ablakot nem lehet bezérni, ugyanis nem jelenik meg close gomb, ill. a hozzá tartozó szöveg.


function overlay(elem) {  
    var newImg = document.createElement('img');  
    newImg.src = elem.firstChild.getAttribute('rel');  
    var overlay = document.getElementById('overlay');   overlay.innerHTML='';  
    overlay.appendChild(newImg);
el = document.getElementById("overlay");
el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
}

 <div id="overlay">


 
Click here to [<a href='#' onclick='overlay()'>close</a>]  
 </div>
12

Ez okozza a problémát

hNczy · 2012. Május. 19. (Szo), 00.34
overlay.innerHTML='';
Fentebbi sorral sajnos a teljes overlay div tartalma kitörlődik. Én nem szeretek nagyon belemászni a DOM-ba, JS nem annyira a kenyerem, így inkább létrehoznék még egy span-t (üresen) az overlayen belül és abba illeszteném be a képet.
<div id="overlay">  
     <div>
          <span id="overlay_img"><!-- ide töltődik majd be a kép --></span>  
          <p>Content you want the user to see goes here.</p>  
            
          Click here to [<a href='#' onclick='overlay()'>close</a>]  
            
     </div>  
</div>  
A függvény meg kb:
function overlay(elem) { 
    // img tag létrehozása és kép hivatkozás beállítása 
    var newImg = document.createElement('img');  
    newImg.src = elem.firstChild.getAttribute('rel');
  
    // az üres span tagban az img elhelyezése
    var overlay_img = document.getElementById('overlay_img');   
    overlay_img.innerHTML='';  //span tartalmának törlés, különben több kép kerülne be a spanba
    overlay_img.appendChild(newImg);

    // overlay elem elrejtése, megjelenítése
    el = document.getElementById("overlay");
    el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";
}
14

Már csak az overlay ablak

pilot · 2012. Május. 19. (Szo), 18.45
Már csak az overlay ablak bezárása nem működik....
15

Külön függvénnyel

pkadam · 2012. Május. 19. (Szo), 18.57
Mivel az overlay() függvényed alapvetően a képmegjelenítésre szolgál, ezért célszerű a bezárást egy másikkal vezérelni. Különösképp, hogy a mostani overlay() egy paramétert vár, a bezárás linknél viszont nem adsz át ilyet.

Tehát szedd szét a két függvényt, legyen az új pl. overlay_close(), ami mindössze az overlay div-edet rejtse el. Az eredeti függvényben pedig a láthatóságot kapcsold be. Vagy még jobb, ha egy külön modal_close()-t hozol létre (a név persze mindegy), a this paraméterrel hívod meg, így univerzálisabban használhatod bármely elem elrejtésére.

Szerk: sőt, működhet a bezáró-függvényed eleve ki/be-kapcsolóként az aktuális állapot függvényében, ekkor az overlay()-ben csak meg kell hívnod magát a modal_close() függvényt, persze paraméterezésnél itt nem a this-szel hívod meg, hanem az általad választott paraméternévvel, ami esetünkben az elem.
16

De hogyan csináljam?? Az JS

pilot · 2012. Május. 20. (V), 08.36
De hogyan csináljam??

Az JS tudásom abszolult nulla, ezelőtt soha nem használtam, valószínűleg ezután sem fogom. CSak ezt az egy problémát kellene megoldanom valahogy, úgyhogy nagyon hálás lennék, ha még egy kis konkrét kóddal kisegítenél....
17

Így.

pkadam · 2012. Május. 20. (V), 21.08
A close gomb onclick-je legyen overlay_close(), a függvény pedig:

function overlay_close() {
  document.getElementById('overlay').style.visibility = 'hidden';
}
Az overlay() függvény pedig tartalmazza az alábbi sort:

document.getElementById('overlay').style.visibility = 'visible';
Illetve, mivel már megvan változóként az overlay div-ed, akkor csak ennyit írj a függvény végére:
overlay.style.visibility = 'visible';
18

Sikerült!!!! Nagyon

pilot · 2012. Május. 21. (H), 08.34
Sikerült!!!!


Nagyon köszönöm a segítségedet.