SetTimeout con chiusura popup non funziona se ci sono altre funzioni close

di il
3 risposte

SetTimeout con chiusura popup non funziona se ci sono altre funzioni close

Salve. Ho alcuni script PHP che contengono dei form html. Lavorano tutti in locale, tramite localhost su Chrome, e lo scopo finale è quello di salvare immagini dal web per far loro fungere da locandine per il mio database di film su Excel. In ogni file c’è una funzione javascript che apre una popup quando clicco su submit. Io vorrei che la popup su cui c’è il tasto submit si chiudesse all’aprirsi dell’altra (e sono riuscita a farlo, con vari metodi) e quest’ultima si chiudesse dopo qualche secondo (e ho fatto anche questo). Quello che non riesco a fare sono le due cose insieme. Se faccio chiudere la prima popup, la funzione setTimeout per la seconda viene ignorata. Non riesco a capire perché e non so più cosa fare. Qualcuno può darmi una mano? Grazie in anticipo.

3 Risposte

  • Re: SetTimeout con chiusura popup non funziona se ci sono altre funzioni close

    Lone Turtle ha scritto:


    Non riesco a capire perché e non so più cosa fare. Qualcuno può darmi una mano?
    In assenza di codice, difficile dire cosa non va e quali parti correggere.
  • Re: SetTimeout con chiusura popup non funziona se ci sono altre funzioni close

    Avevo intenzione di riportare il codice se qualcuno me lo avesse chiesto. Ma è successa una cosa: dopo 5 giorni che mi arrovellavo il cervello, proprio oggi, 2 minuti dopo aver postato nel forum, sono riuscita a trovare una, chiamiamola, escamotage. Anche se continuo a non capire e quindi sarebbe bello trovare una soluzione diversa da quella trovata oggi da me. Questa sera posterò del codice, e se avrai ancora voglia di aiutarmi, te ne sarò grata. Ciao
  • Re: SetTimeout con chiusura popup non funziona se ci sono altre funzioni close

    Primo script:
    
    <form id="invia_dati_locandina" action="SalvaLocandina.php" method="POST" target="popup_locandina">
    	Link locandina<br>
    	<input type="text" name="link_locandina" size="120"><br>
    	Titolo film<br>
    	<input type="text" name="titolo_film" size="60"><br>
    	Anno film (se il film ha un omonimo)<br>
    	<input type="text" name="anno_film"><br><br>
    	Dove vuoi salvare la locandina?<br>
    	<select name="percorso">
    		<option value="G:/4_-_Film/Locandine/">In film di G</option>
    		<option value="E:/XAMPP/htdocs/0-NuoviFilm/Locandine/">In 0-NuoviFilm di E</option>
    	</select><br><br>
    	<input type="submit" name="invia_dati" value="Invia dati" onclick="ApriSalva()">
    	<input type="reset" name="cancella_tutto" value="Elimina dati">
    </form>
    
    <script>
    function ApriSalva(){
        var prima=window.open('','popup_locandina','width=400,height=750');
        document.getElementById('invia_dati_locandina').submit();
    }
    
    </script>
    Secondo script:
    $link=$_POST["link_locandina"];
    $titolofilm=$_POST["titolo_film"];
    $annofilm=$_POST["anno_film"];
    $percorso=$_POST["percorso"];
    if(ControlloExtImg($link)==true){
    	$ext=EstensioneImg($link);
    	if($annofilm!=''){
    		$nomelocandina=TitoloLocandina($titolofilm).' ('.$annofilm.')'.$ext;
    	}else{
    		$nomelocandina=TitoloLocandina($titolofilm).$ext;
    	}
    	$percorsolocandina=$percorso.str_replace(' ','_',$nomelocandina);
    	if(file_exists($percorsolocandina)){
    		$esiste=true;
    	}else{
    		$esiste=false;
    	}
    	$dimensioni=[];
    	$dimensioni=getimagesize($link);
    	$larghezza=$dimensioni[0];
    	$altezza=$dimensioni[1];
    	$rap=$altezza/$larghezza;
    	$l=Dimensioni($larghezza,$altezza,250)[0];
        	$a=Dimensioni($larghezza,$altezza,250)[1];
    	echo "Larghezza immagine: $larghezza<br>";
    	echo "Altezza immagine:  $altezza<br>";
    	echo "Rapporto altezza/larghezza (ottimale è 1,428): $rap<br>";
    	SeSitoConosciuto($link);
    	echo '<div><img width='.$l.' height='.$a.' src='.$link.'></img></div><br><br>';
    	echo '<form id="salva_locandina" action="Conferme.php" method="POST" target="popup_salvataggio">';
    	echo '<input type="hidden" name="link" value='.$link.' /><br>';
    	echo '<input type="hidden" name="percorso_locandina" value='.$percorsolocandina.' /><br>';
        	echo '<input type="radio" name="salva" value="si" checked="si">Salva la locandina<br>';
     	echo '<input type="radio" name="salva" value="no" >Non salvare la locandina<br>';
     	echo '<input type="submit" name="conferma_salvataggio" value="Conferma scelta" onclick="ApriConferme()"><br>';
        	echo '</form><br>';
    }else{
    	echo "Il formato dell'immagine non è accettabile<br>";
    	}
    ?>
    <script>
    function ApriConferme(){
        var seconda=window.open('','popup_salvataggio','width=400,height=450');
        document.getElementById('salva_locandina').submit();
        
    Con la prossima riga chiudo la prima popup, che quindi si chiude appena la seconda viene caricata.
    Ho anche usato l'evento load, ma non ce n'è bisogno.
    
       	window.open('','popup_locandina','width=400,height=750').close();
       	
    Con la prossima riga (codice trovato in rete) passo la variabile $esiste da PHP a javascript
    
       	var $esiste = <?php echo json_encode($variabilePHP, JSON_HEX_TAG); ?>;
       	
    Se $esiste è false voglio che questa seconda poup si chiuda in qualche attimo, altrimenti la chiuderò
    dalla prossima popup come ho fatto qui per chiudere la prima (se $esiste è false non ci saranno altre popup)
    
       	if($esiste==false){
       		setTimeout(function() {
        		seconda.close();
    		}, 10000);
    }
    </script>
    
    Come ho detto nel mio primo post, si chiude la prima popup ma la seconda rimane aperta. Se non chiudo la prima, invece, la funzione di chiusura della seconda popup fa il suo dovere. Non ne comprendo il motivo.
    Comunque ho risolto mettendo i vari setTimeout in tutte le possibili ramificazioni dei vari if else. È un po' bruttino e ripetitivo, ma funziona (e poi tanto l'utente non si lamenterà di sicuro dato che è tutto in locale e l'unico utente sono io).
    Spero di essere stata chiara, grazie in anticipo per qualsiasi risposta.
Devi accedere o registrarti per scrivere nel forum
3 risposte