Notizie: scarica ora l'ultima versione disponibile di SeaMonkey!

Autore Topic: FireFox 1.5.0.2 + javascript  (Letto 1571 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Generazione2000

  • Post: 125
    • Generazione2000
FireFox 1.5.0.2 + javascript
« il: 23 Aprile 2006 19:13:58 »
Ciao

ecco il mio problema:
il presente script JS gira perfettamente su
Ff 1.0.7 S.O. Windows Xp Home Edition
Ff 1.0.6 S.O. Mandrake Linux 2006
IExplorer 6.0.2800.1106 S.O. Win98
IExplorer 6.0.2900.2180.xpsp_sp2_rtm.040503-2158

Ma mi va in loop (e quindi crash) su

Ff 1.5.02 S.O. win98
Ff 1.5.02 S.O. Windows Xp Home Edition

Descrizione del problema

In un form compare una cella che deve assumere un valore numerico (INT,2)
Se questo valore non raggiunge il valore minimo richiesto o suoi multipli.
Immesso il valore e togliendo il fuoco alla cella, se il valore immesso non è valido, si aprirà una finestra di input nella quale si cerca di correggere il valore.
Siccome inserendo il valore e battendo invio questa routine non avrebbe effetto, un ulteriore controllo viene effettuato nella pagina richiamata dal form.

E qui è il problema,
arrivato in questa seconda pagina (ricezione valori del form) digitando il valore numerico citato e battendo invio (nel form), mi si apre la finestra successiva (_self), OK.
essendo il valore numerico non valido si viene rimandati alla pagina del form (history.go(-1)),
ma qui va in loop

ecco i codici JS
pagina del form:
Codice: [Seleziona]
<script language="JavaScript" type="text/javascript">
<!--
//LIMITE E' IL VALORE DA NON SUPERARE,POSIZIONE E' IL NOME DEL CAMPO DA CONTROLLARE
function Check(limite,posizione)
{
//CONTROLLO L'ELEMENTO DEL FORM RELATIVO AL NOME DEL CAMPO NE ESTRAGGO IL VALORE E LO ASSEGNO AD UNA VARIABILE
numeroins=document.forms[0].elements[posizione].value;
//LE DUE RIGHE SEGUENTI NON SONO NECESSARIE MI SERVONO SOLO PER VEDERE SE I VALORI DENTRO LE VARIABILI SONO GIUSTI
//alert("Valore del campo= "+numeroins);
//alert("Valore minimo= "+limite);
//alert("Valore della posizione= "+posizione);
soglia=(numeroins / limite);
//alert("Valore della soglia= "+soglia);
confezioni=Math.ceil ( soglia );
//alert("Valore delle confezioni= "+confezioni);
suggerito=(Math.ceil ( soglia )*limite);
//alert("Valore suggerito= "+suggerito);
//IMPOSTO UN CICLO PER CONTROLLARE SE SUPER IL LIMITE E DO LA POSSIBILITA' ALL'UTENTE DI RIDIGITARE FINCHE' SARA' RISPETTATO IL LIMITE;
while((numeroins!=suggerito)&&(numeroins>0))
{
  //alert("ATTENZIONE !! Ci è impossibile soddisfare la quantità richiesta ("+numeroins+"),  è inferiore al minimo d'ordine("+suggerito+")");
  valore=prompt("ATTENZIONE !! la quantità richiesta ("+numeroins+") non rientra nella quantità contenuta nelle confezioni ("+confezioni+"). Quantità consigliata=("+suggerito+")  - RIDIGITARLO (0= annulla)",suggerito);
  numeroins=valore;
  soglia=(numeroins / limite);
  suggerito=(Math.ceil ( soglia )*limite);
  document.forms[0].elements[posizione].value=valore;
  document.forminputqta.qta_quantita.focus();
  //document.forms[0].qta_quantita.value=valore;
  //document.forminputqta.note.focus();
  //alert("valore modificato !!");
  self.close();
  document.forminputqta.submit()
}
}
//-->
</script>
e questo è il codice PHP/JS presente nella pagina di ricezione dei dati immessi nel form
Codice: [Seleziona]
if ($inqty < $minqta)
{
  echo "<script>\n
  alert (\"ATTENZIONE !! la quantità richiesta non raggiunge la quantità contenuta nella confezione. Digitare nuovamente la quantità desiderata e controllare il minimo di acquisto.\");
  history.go(-1);
  </script>\n";
  exit;
}

come descritto sopra, con la versione 1.0.7 ed inferiori non accadeva, succede solo con la versione 1.5.0.2

potete aiutarmi a capire cosa avete modificato in modo che possa correggere lo script e portarlo in compatibilità con le nuove versioni ?

Grazie

Stefano


Offline Underpass

  • I've got fabric to sell
  • Amministratore
  • Post: 24618
    • Mozilla Italia
Re: FireFox 1.5.0.2 + javascript
« Risposta #1 il: 23 Aprile 2006 20:25:06 »
Sposto in Evangelizzazione

Offline the fly on the net

  • Post: 297
    • the fly on the net
Re: FireFox 1.5.0.2 + javascript
« Risposta #2 il: 28 Aprile 2006 13:28:06 »
E qui è il problema,
arrivato in questa seconda pagina (ricezione valori del form) digitando il valore numerico citato e battendo invio (nel form), mi si apre la finestra successiva (_self), OK.
essendo il valore numerico non valido si viene rimandati alla pagina del form (history.go(-1)),
ma qui va in loop

Il comportamento è molto strano, soprattutto se nelle versioni precedenti funziona. Comunque prima di tutto controllerei se e quali funzioni JS vengono richiamate dalla pagina che contiene il form quando richiami la pagina con history.go(-1) aggiungendo alcuni semplici alert.

Ho il dubbio che venga rieseguito il submit, il quale a sua volta respinge indietro, ecc.: questa potrebbe essere una condizione che potrebbe causare un loop.

Se viene rieseguito il submit, penso che con location.referer tu riesca a distinguere da quale pagina proviene la richiesta e comportarti di conseguenza.


Offline Generazione2000

  • Post: 125
    • Generazione2000
Re: FireFox 1.5.0.2 + javascript
« Risposta #3 il: 09 Giugno 2006 01:33:42 »
Ciao

ho ristudiato ancora la situazione, corretto eventuali imprecisazioni, e ti confermo che nelle versioni precedenti funzionava e funziona ancora (vedi Ff 1.0.6 S.O. Mandrake Linux 2006). Inoltre quando mi sono ancorto del problema la versione su win98 era ancora la precedente e l'ho aggiornata appositamente perche su winXp mi dava il problema, anche sul 98 una volta aggiornato.
Ora che gli aggiornamenti sono automatici ho la versione 1.5.0.4 e il problema persite

Nella precedente comunicazione, la pagina di risposta (apreta con metodo _self) anziché tornare indietro di 1 nella cronologia, apre una nuova pagina e si chiude se stessa (self.close). Questo facendo anche attenzione, che le finestre non avessero lo stesso nome.

Bene, il problema del loop rimane.

Analizzando gli eventi:

una finestra (nome=quantitatemp, file=qta.php) che contiene un form per l'inserimento di un input numerico, ha al posto del pulsante submit un pulsante tipo button che produce un'evento di controllo sul valore inserito.
Se il valore inserito nella cella risulta valido si produce l'evento submit che apre una nuova pagina (procedi.php).
In questo modo il valore passato alla nuova pagina (procedi.php) è comunque sempre valido.
Dunque il problema non si genera.

Qui il problema:
Siccome nella pagina qta.php, che contiene il form, dopo aver inserito nella cella un valore=X, premendo <Invio> nella tastiera, al posto del click sul pulsante (Invia), non genera un evento di controllo ma prende il submit del modulo, il valore X viene passato nella pagina successiva (procedi.php).
Si rende necessario dunque il controllo del valore (php), se il valore X non soddisfa viene generato un'evento JS.
Questo evento apre un'alert e poi apre (ora) una nuova finestra (_blank) che richiama la stessa pagina precedente (qta.php) e poi si chiude.

Note:
in questo modo ho tolto l'evento histori.go perchè apro una nuova finestra con nome diverso.

Errore:
Tornando alla pagina successiva sembra che l'evento click sul pulsante <Invia> venga comunque generato (considerare che prima non è stato chiamato, in quanto si è prenuto invio sulla tastiera)
Questo genera un loop sulla funzione promt, per il valore X, di JS

Vi posto i codici modificati

Questo il codice dove esite il form forminputqta e input inqty (qta.php):

Codice: [Seleziona]
<script language="JavaScript" type="text/javascript">
<!--
//LIMITE E' IL VALORE DA NON SUPERARE,POSIZIONE E' IL NOME DEL CAMPO DA CONTROLLARE
function Check(limite,posizione)
{
//CONTROLLO L'ELEMENTO DEL FORM RELATIVO AL NOME DEL CAMPO NE ESTRAGGO IL VALORE E LO ASSEGNO AD UNA VARIABILE
numeroins=document.forminputqta.inqty.value;
//LE DUE RIGHE SEGUENTI NON SONO NECESSARIE MI SERVONO SOLO PER VEDERE SE I VALORI DENTRO LE VARIABILI SONO GIUSTI
//alert("Valore del campo= "+numeroins);
//alert("Valore minimo= "+limite);
//alert("Valore della posizione= "+posizione);
soglia=(numeroins / limite);
//alert("Valore della soglia= "+soglia);
confezioni=Math.ceil ( soglia );
//alert("Valore delle confezioni= "+confezioni);
suggerito=(Math.ceil ( soglia )*limite);
//alert("Valore suggerito= "+suggerito);
//IMPOSTO UN CICLO PER CONTROLLARE SE SUPER IL LIMITE E DO LA POSSIBILITA' ALL'UTENTE DI RIDIGITARE FINCHE' SARA' RISPETTATO IL LIMITE;
while((numeroins != suggerito) && (numeroins > 0)) {
  //alert("ATTENZIONE !! Ci è impossibile soddisfare la quantità richiesta ("+numeroins+"),  è inferiore al minimo d'ordine("+suggerito+")");
  valore=prompt("ATTENZIONE !! la quantità richiesta ("+numeroins+") non rientra nella quantità contenuta nelle confezioni ("+confezioni+"). Quantità consigliata=("+suggerito+")  - RIDIGITARLO (0= annulla)",suggerito);
  numeroins=valore;
  soglia=(numeroins / limite);
  suggerito=(Math.ceil ( soglia )*limite);
  document.forminputqta.inqty.value=suggerito;
  document.forminputqta.inqty.focus();
  document.forms[0].inqty.value=valore;
//  alert("valore modificato !!");
  document.forminputqta.submit();
  }
document.forminputqta.submit();
}

//-->
</script>

questo il codice nella pagina procedi.php

Codice: [Seleziona]
if ($inqty < $minqta)
{
?>
<script>
        alert("Attenzione! Il valore inserito nella quantità degli articoli non è valido");
window.open('procedi.php?aggiunta=<? echo $aggiunta;?>&ns_cod_quantita=<? echo $incodi;?>','_blank','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=yes,width=700,height=500, top=30, left=30');
self.close();
</script>
<?
  exit;
}

Grazie per la collaborazione

Stefano

« Ultima modifica: 09 Giugno 2006 01:46:26 da Generazione2000 »

Offline Generazione2000

  • Post: 125
    • Generazione2000
Re: FireFox 1.5.0.2 + javascript
« Risposta #4 il: 09 Giugno 2006 02:11:17 »
Ciao

attualmente ho risolto inserendo l'evento onsubmit nel form che riproduce lo stesso evento del click sul buttone , anche se con un solo loop (che riamane) però funziona (due click sul pulsante Ok del prompt valore).

In questo modo ho coperto il controllo anche per l'evento return keyboard pressing

ciao

Stefano
« Ultima modifica: 09 Giugno 2006 10:56:56 da Generazione2000 »

0 Utenti e 1 Visitatore stanno visualizzando questo topic.