ugrás a tartalomhoz

Az oldal újratöltése + vissza ugrás ahol volt

cszlak · 2011. Júl. 5. (K), 07.22
Van egy oldalam dinamikusan létrehoz form ablakokat, amik rendelkeznek egyenként egy mentés gombbal.


<input type="submit" value="Mentés <?php echo $ablak_szam; ?>" name="ablak_szam[<?php echo $ablak_szam; ?>]" style="float:right;width:100px;height:25px;" />

Majd végrehajtja feladatát és ujratölti az oldalt, hogy látszódjon mit történt.

<?php

 if(@mysql_query($sql)){//mentés sikerült
  $uzenet2 ='Mentés kész. ';
   ?>
 
<script type="text/javascript">
window.parent.location.href = "kepek_admin.php?text=<?php echo $_GET['text'] ?>";
</script>


 
  }//f(@mysql_query($sql))

Majd az oldal tetején marad persze.
Azt szeretném, hogy oda ugorjon vissza ahol volt.
Találtam a neten pár kódott ami ezzel foglalkozik, de nem nagyon értek a JS-hez, így kellene egy kis segítség, hogyan kell őket alkalmazni.

<script type="text/javascript">
  var nincs_diven = true;
  function mutat_link()
  { document.getElementById("rejtett_link").style.visibility = "visible";
    nincs_diven = false;
  }
  function rejt_link()
  { if (nincs_diven)
    { document.getElementById("rejtett_link").style.visibility = "hidden"; }
  }
</script> 
<!-- felgörgetés függvény -->
<script type="text/javascript">/* IE miatt kell */
function getYOffset()
{ var pageY;
  if(typeof(window.pageYOffset)=='number')
  { pageY=window.pageYOffset; }
  else
  { pageY=document.documentElement.scrollTop; }
  return pageY;
}
/* léptetés kódja */
var mozgas;
function megall()
{ clearTimeout(mozgas); }
function laptetejere(end_pozicio)
{
var aktual_pozicio = getYOffset();
  if (aktual_pozicio > end_pozicio)
  {
    window.scrollBy(0,-25);
    mozgas = setTimeout('laptetejere('+end_pozicio+')',1);
  }
  else
    megall();
}
</script>
<style type="text/css">
/*
.cim {
    border: 1px groove black;
    height: 150px;
    width: 600px;
    color: blue;
    background-color: red;
    padding: 0;
    margin: 0;
}
*/
</style>

<script type="text/javascript">
/* Scroll-koordináták lekérdezése */
function get_scroll_positions()
{
  var pageX;
  var pageY;
  if(typeof(window.pageXOffset)=='number')
  { pageX=window.pageXOffset; }
  else
  { pageX=document.documentElement.scrollLeft; }
  if(typeof(window.pageYOffset)=='number')
  { pageY=window.pageYOffset; }
  else
  { pageY=document.documentElement.scrollTop; }
  return {le:pageX,to:pageY};
}
/* GET-változók lekérdezése */
function get_Url_Vars()
{
  var vars = [], hash;
  var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
  for(var i = 0; i < hashes.length; i++)
  {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
  }
  return vars;
}
/* aktuális scroll-koordináták lekérdezése, továbbítás GET-ként */
function get_kordinatak_send(vissza_all)
{
  if (vissza_all)
  {
    var le_positions=get_scroll_positions();
    var left = le_positions.le;
    var top = le_positions.to;
    window.location.href = 'linkvibral.html?l='+left+'&t='+top;
  }
  else
    window.location.href = 'linkvibral.html';
}
/* adott scroll-koordináták beállítása */
function set_kordinatak()
{
  var hash = get_Url_Vars();
  var bal = (hash['l'] != undefined) ? hash['l'] : 0;
  var font = (hash['t'] != undefined) ? hash['t'] : 0;
  window.scrollBy(bal,font);
  if ((bal != '0') || (font != '0'))
    alert('Frissítés előtti pozició balról: '+bal+'px, föntről: '+font+'px');
}
</script>


 <button type="button" class="sitetop" onClick="laptetejere(200)">Lap tetejétől 200px-re</button>
Tehát mégegyszer a probléma, hogy újratöltés után oda ugorjon vissza ahol volt, tehát abba a képernyő pozicióba, de előtte hajtsa végre a php kódott is. Nem gond ha közben scrolozik a képernyő, vagy villan.
Előre is köszönöm, a válaszokat.
 
1

Szerintem neked ajax kell.

deejayy · 2011. Júl. 5. (K), 07.34
Szerintem neked ajax kell. Nagyjából arra tudod használni, hogy oldal újratöltés nélkül adatokat küldj vagy fogadj a szerver felől. Tehát ajaxxal betölthetsz egy php oldalt a háttérben, annak a kódja lefut, de a böngészőben (látszólag) nem történik semmi.

Az ajax kérés eredményét persze fel lehet dolgozni, azaz ha a php kód valamilyen hibával tér vissza, le tudod kezelni.

jQueryvel:

$.ajax({
  url: '/adatfogado.php',
  success: function (data) {
    // az adatfogado.php által visszaadott html kód, lehet üres is, persze
    alert(data);
  }
});
2

Ha location.href-fel mész új

Hidvégi Gábor · 2011. Júl. 5. (K), 07.52
Ha location.href-fel mész új oldalra, akkor legfeljebb paraméterátadással (scrollpozíciókat küldeni az űrlap adataival) tudsz ugyanarra a pozícióra ugrani.

Vagy a másik megoldás az AJAX, de akkor abba bele kell kicsit ásnod magad, ha még nem foglalkoztál vele.

Az AJAX-os megoldás több munkával járhat, mert jobban kell módosítani a szerveroldali fájlokat, továbbá a legtöbb esetben nagyobb kliensoldali rutinkönyvtár (pl. a fent említett jQuery) szükséges a kezeléséhez.
3

Nem megyek új oldalra!

cszlak · 2011. Júl. 5. (K), 10.06
Nem megyek új oldalra!

A href ugyanerre az oldalra hivatkozik.

Az AJAX-ot nem akarom bele keverni ha lehetséges.
Csak egy js script kellene nekem, ami elmenti mikkor nyom egy gombot, az oldal y koordinátáját, lefutatja a phph-t, majd ha kész akkor újratölti az oldalt, és leugrik oda ahol az y megadja neki.

Én így képzeltem el.
4

Hacsak nem értem félre, hogy

H.Z. v2 · 2011. Júl. 5. (K), 10.24
Hacsak nem értem félre, hogy mit akarsz: ehhez még JS se nagyon kell.
Egy id-vel ellátott tagbe csomagolod azt, ahová ugrani akarsz és az oldal címének végére teszel egy #-t és mögé az id-t:

<div id="111">
itt vannak a mezőid és a submit gomb
</div>
Hivatkozáskor meg így
http://host/cim#111


Ha ez nem lenne elég, akkor még nézd meg a javascript focus() függvényét (illetve ez valamelyik JS objektum metódusa, ha egészen pontos akarok lenni)
5

Két okból nem ilyen egyszerű!

cszlak · 2011. Júl. 5. (K), 10.27
Egyrészt mint írtam ezek dinamikusan létrejövő ablakok a képernyőn amik táblák.
Tehát nem DIV-ben vannak.
Bocs most nézem, hogy a table is tartalmazhat id-t.

A másik hogy mint írtam, íg van az újrahívás:

<script type="text/javascript">  
window.parent.location.href = "kepek_admin.php?text=<?php echo $_GET['text'] ?>";  
</script>  
tehát van egy kepek_admin.php?text=1
Ez után kellen raknom még egy # ? Így?
kepek_admin.php?text=1#idnev
6

Mondjuk én becsomagolásról

H.Z. v2 · 2011. Júl. 5. (K), 10.35
Mondjuk én becsomagolásról beszéltem:
<div id=...><table...></table></div>
Ami nem valami szép, de működőképes.
És igen, elég sok tag tartalmazhat id-t.

Megnéztem, így is a végére kell írni a #id-t.
7

Kipróbáltam..

cszlak · 2011. Júl. 5. (K), 11.10
Kipróbáltam így:

window.parent.location.href = "kepek_admin.php?text=<?php echo $_GET['text'] ?>#<?php echo $ablakid; ?>";

Oda ugrik, de az oldal újrtöltést nem hajtja végre.
8

Az oldal url-je megváltozik?

Hidvégi Gábor · 2011. Júl. 5. (K), 13.17
Az oldal url-je megváltozik?
9

Igen

cszlak · 2011. Júl. 5. (K), 14.42
A

 window.location.href = "kepek_admin.php?text=<?php echo $_GET['text'] ?>";
a text tartalmaz egy fontos infót.amit egy switch válogat le:

	 switch ($_GET['text']):
	case '1': $filedir = 'kep/Konyhabutor'; $kepfelirat ='Konyhabútor'; $title_cimke ='Konyhabútor'; $tabla_name = 'konyhabutor'; $megjelenito = '../konyhabutor.php'; break;
case '2': $filedir = 'kep/egyedi'; $kepfelirat ='Egyedi'; $title_cimke ='Egyedi'; $tabla_name = 'egyedi'; $megjelenito = '../egyedi.php';  break;
case '3': $filedir = 'kep/egyedi'; $kepfelirat ='Nappali'; $title_cimke ='Nappali'; $tabla_name = 'nappali'; $megjelenito = '../egyedi.php';  break;

10

Találtam egy ilyen megoldást:

cszlak · 2011. Júl. 5. (K), 14.50
Találtam egy ilyen megoldást:

/* Scroll-koordináták lekérdezése */
function get_scroll_positions()
{
  var pageX;
  var pageY;
  if(typeof(window.pageXOffset)=='number')
  { pageX=window.pageXOffset; }
  else
  { pageX=document.documentElement.scrollLeft; }
  if(typeof(window.pageYOffset)=='number')
  { pageY=window.pageYOffset; }
  else
  { pageY=document.documentElement.scrollTop; }
  return {le:pageX,to:pageY};
}
/* GET-változók lekérdezése */
function get_Url_Vars()
{
  var vars = [], hash;
  var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
  for(var i = 0; i < hashes.length; i++)
  {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
  }
  return vars;
}
/* aktuális scroll-koordináták lekérdezése, továbbítás GET-ként */
function get_kordinatak_send(vissza_all)
{
  if (vissza_all)
  {
    var le_positions=get_scroll_positions(); 
    var left = le_positions.le;
    var top = le_positions.to;
 window.location.href = 'kepek_admin.php?<?php if($_GET['text']){ print ("text=" .$_GET['text'] ."&"); } else{print("text=0&");}?>l='+left+'&t='+top;
  }
  else
  window.location.href = 'kepek_admin.php<?php if($_GET['text']){ print ("?text=" .$_GET['text'] ); } else{print("?text=0");}?>';
}
/* adott scroll-koordináták beállítása */
function set_kordinatak()
{
  var hash = get_Url_Vars();
  var bal = (hash['l'] != undefined) ? hash['l'] : 0;
  var font = (hash['t'] != undefined) ? hash['t'] : 0;
  window.scrollBy(bal,font);
 /* window.location.href = 'kepek_admin.php?l='+bal+'&t='+font;*/
 /* if ((bal != '0') || (font != '0'))
    alert('Frissítés előtti pozició balról: '+bal+'px, föntről: '+font+'px'); */
}
</script>
Csak az a gond, hogy a text értékét is elmenti,a mi nem is lenne gond,de ha annak másik értéket adok akkor visszatölti a régit.