Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Stop unload
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> HTML/JavaScript/CSS
Subiectul anterior :: Subiectul următor  
Autor Mesaj
MasterPhoton



Data înscrierii: 06/Mar/2003
Mesaje: 437

Trimis: Mar Iun 28, 2005 12:56 pm    Titlul subiectului: Stop unload  

Salut,

Am o pagina cu un formular si nenumarate linkuri in meniu (care meniu se schimba FOARTE des).
Vreau sa verifica daca vreunul din valorile din formular a fost MODIFICAT (asta am reusit sa fac), si daca da sa afisez un confirm cu optiuni OK/cancel (am facut), si sa salvez daca apasa pe OK (am facut). Problema este urmatoarea:
- check_form se declanseaza la body onUnload, pentru ca nu-l pot pune pe fiecare link din pagina; cum pot opri IE sa se duca totusi in pagina in care a fost trimis prin apasarea linkului (IE face totusi submit pe formular - in cazul in care s-a modificat - dar si redirecteaza pagina spre link, desi in address bar adresa ramane cea care trebuie!)

Cum naiba fac sa opresc IE sa se duca spre linkul apasat daca se face submit la formular?! (Am incercat cu self.location.href=self.location.href insa NU merge)

Multumesc!

PS In celelalte browsere merge, adica daca sunt de acord sa salvez modificarile, acestea sunt salvate si se intoarce in aceeasi pagina.
Sus  
johnny



Data înscrierii: 31/Iul/2004
Mesaje: 904
Locație: Bucuresti

Trimis: Mar Iun 28, 2005 2:26 pm    Titlul subiectului:  

alert(self.location.href)

vezi ce valoare are...
Sus  
MasterPhoton



Data înscrierii: 06/Mar/2003
Mesaje: 437

Trimis: Mar Iun 28, 2005 7:55 pm    Titlul subiectului: ...valoarea corecta  

alert-ul are valoarea corecta. doar ca imediat dupa ce se afiseaza alert-ul pagina se duce la cea de la linkul apasat!
Sus  
johnny



Data înscrierii: 31/Iul/2004
Mesaje: 904
Locație: Bucuresti

Trimis: Mar Iun 28, 2005 8:57 pm    Titlul subiectului:  

cred ca e vorba de prioritatea actiunilor, care se executa mai intai.
ie-ul are un comprament mai special...

un workaround cred ca ar fi regandirea logicii. daca pui ceva online (daca nu e confidential), poate gasim o solutie.
Sus  
MasterPhoton



Data înscrierii: 06/Mar/2003
Mesaje: 437

Trimis: Mar Iun 28, 2005 9:45 pm    Titlul subiectului: :)  

index.php are:
<body onUnload='check_form('Salvezi modificarile? OK-da, Cancel-nu');'>


functia check_form este o functie care vede daca fiecare element dintr-un formular are valoarea actuala diferita fata de cea implicita. De exemplu:
Cod:
function check_form(message)
{
   var flag = false;
   if (document.getElementById)
   {
      //Netscape 6 specific code
      pre = 'document.getElementById("';
      post = '").';
   }
   if (document.all)
   {
      //IE4+ specific code
      pre = 'document.all.';
      post = '.';
   }
   if (eval (pre + 'frm' + post + 'Submit.value') != 'Submited')   // ca sa nu faca verificarea si pentru butonul 'save'
   {
      if (eval (pre + 'frm' + post + 'Name.value') != eval (pre + 'frm' + post + 'Name.defaultValue'))
      {
         flag = true;
      }
      if (eval (pre + 'frm' + post + 'Description.value') != eval (pre + 'frm' + post + 'Description.defaultValue'))
      {
         flag = true;
      }
   }
   else
   {
      return false;
   }
   if (flag)
   {
      if (confirm(message))
      {

         document.frm.submit();
      }
      else
      {
         return false;
      }
   }
}


E atat de simplu incat e enervant ca NU MERGEEEE :(
Sus  
johnny



Data înscrierii: 31/Iul/2004
Mesaje: 904
Locație: Bucuresti

Trimis: Mie Iun 29, 2005 2:18 pm    Titlul subiectului:  

ok, conform testelor a rezultat ca:
linkul are prioritate in fata onUnload. In IE se oberva ca incepe sa incarce pagina externa si apoi ruleaza scriptul js. Gmail are implementat ceva similar, cand incepi sa completezi un mesaj si dai click pe alt link. implementarea lor pentru IE contine:
<a onclick="return top.js.OpenExtLink(window,event,this)" href="url">
deci, verificarea se face onclick (care are prioritate inaintea href). Exemplu:

<a onclick="document.location.href='http://www.php.net'; return false;" href="http://google.ro">Google</a>

la apasarea linkului te va duce pe php.net si nu pe google (testat IE si Firefox)

poti sa implementezi ceva similar.

O alta solutie, care pare sa fie mai aplicabila:
onbeforeunload()

onbeforeunload

Si un exemplu de usage:
http://php.scripturi.ro/exemplu_js.php
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> HTML/JavaScript/CSS
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community