Newsgroup: it.comp.lang.javascript
Titolo: reindirizzamento con tasti

ciao,
con lo script che segue cambio la pagina web visualizzata dal browser
premendo il tasto freccia destra.
if( document.captureEvents && Event.KEYUP ) {
  document.captureEvents( Event.KEYUP );
}
document.onkeyup = alertkey;
function alertkey(e) {
  if( !e ) {
    if( window.event ) {
      e = window.event;
    } else {
      return;
    }
  }
  if( typeof( e.keyCode ) == 'number'  ) {
    e = e.keyCode;
  } else if( typeof( e.which ) == 'number' ) {
    e = e.which;
  } else if( typeof( e.charCode ) == 'number'  ) {
    e = e.charCode;
  } else {
    return;
  }
  if (e  == 39) {
     window.location = '
http://www.xxx.com/pagina.php?id=1
';
  }
}
Il mio problema è che vorrei rendere dinamica la destinazione in
funzione della pagina visualizzata  passando in qualche modo allo
script l'indirizzo da raggiungere di volta in volta.
Cioè vorrei fare in modo che se mi trovo in pagina.php?id=1 premendo
freccia destra vado in pagina.php?id=2, se sono in pagina.php?id=2
premendo freccia destra vado in pagina.php?id=3 e così via.
Come posso fare?

      window.location = '
http://www.xxx.com/pagina.php?id=1
';
sarà quindi "?id=1"
A questo punto devi manipolare tale stringa per ottenere il valore che ti
serve. A giro troverai sicuramente una tonnellata di script per una gestione
più "user friendly" della querystring, ma in quel caso specifico puoi
semplicemente fare:
	var id = parseInt(window.location.search.substr(1).split("=")[1],10);
Dalla stringa di cui prima tolgo il primo carattere, e poi la "splitto"
usando come separatore il =. In questo modo ottengo un array di due elementi
(nel tuo caso). Il primo (indice 0) conterrà "id", mentre il secondo (indice
1) conterrà il valore ("1", in questo caso). Trasformo quindi il secondo in
numero con il parseInt, e lo metto nella variabile id.
A questo punto, per cambiare location, dovrò solo incrementarlo di uno:
	window.location.href = "
http://www.xxx.com/pagina.php?id=
"+(++id);
Bada bene, che se non è presente la querystring, l'istruzione di substr e
split andrà in errore, quindi è bene che tu controlli se search è
avvalorata, prima di manipolarla; se può essere anche vuota.
-- 
~ Io non soffro di pazzia, ne godo ogni minuto.
(I don't suffer from insanity, I enjoy every minute of it)

Grazie.
Mi sono però dimenticato di precisare una cosa importante: non è
detto che il valore di id sia passato tramite  query string, infatti
l'indirizzo potrebbe anche essere semplicemente 
www.xxx.com/pagina.php
ed in questo caso il valore di id è calcolato in base ad alcuni dati
presenti nelle variabili di sessione di php. Di conseguenza il valore
che dovrà avere id e quindi la query string deve necessariamente
essere calcolato dallo script php. Per cui mi servirebbe sapere come
fare a passare il valore calcolato alla funzione javascript che
gestisce l'evento.
Potrei anche scrivere il javascript con delle funzioni php direttamente
nel listato html però mi sembrava più elegante mettere il javascript
in un file esterno e passare alla funzione l'indirizzo del link.....



Qui hai una contraddizione in termini. Il valore viene calcolato server side
da PHP, ma lo vuoi avere lato Javascript, senza passarglielo.
Se vuoi evitare di scriverlo direttamente nel codice js, d'accordo. Ma in un
modo o nell'altro dal server lo devi passare al client. Ergo, lo devi
scrivere da qualche parte. O nella querystring (questo comporterebbe un
redirect da parte di PHP), o in qualche elemento della pagina in modo che
sia recuperabile da JS tramite DOM.
Alternativamente, potresti scriverlo in un cookie.
Insomma, in qualche modo devi passare il dato dal server al client. Non
nessariamente a JS direttamente, ma al client glielo devi passare.
-- 
~ "Quando ti rifiuti di imparare una lezione in un modo, ti verrà
ripresentata
sotto un altro aspetto." (E.Caddy)

ZER0 ha scritto:

Certo, il problema è che non so come fare a passarlo da php allo
script che contiene la funzione che gestisce l'evento se quest'ultimo
è richiamato da un file esterno.

ZER0 ha scritto:

Certo, il problema è che non so come fare a passarlo da php allo





Te l'ho già detto. Ripeto:
"Se vuoi evitare di scriverlo direttamente nel codice js, d'accordo.
Ma in un modo o nell'altro dal server lo devi passare al client.
Ergo, lo devi scrivere da qualche parte.
O nella querystring (questo comporterebbe un redirect da parte di PHP), 
o in qualche elemento della pagina in modo che sia recuperabile da JS
tramite DOM.
Alternativamente, potresti scriverlo in un cookie."
Cosa non ti è chiaro?
-- 
~ "Le cose che esistono già non c'è bisogno di disegnarle.
Io ne disegno di nuove e mi diverto a guardarle."
(Gianni Rodari, "Il pennarello")


Vorrei evitare cookie e query string e quindi vorrei scriverlo in
qualche elemento della pagina ma non mi è chiaro come fare proprio a
livello di sintassi perchè javascript lo conosco pochissimo.
La mia situazione precisamente è questa:
immagina il primo script che ho postato salvato in un file esterno che
richiamo nella pagina web con il tag html <script
type="text/javascript" src="mioscript.js"></script>. Al posto della
riga "window.location = '
http://www.xxx.com/pagina.php?id=1'
;" però ce
ne sarebbe una così "window.location = yyy;" dove yyy è una variabile
che contiene il link da raggiungere premendo il tasto freccia dx.
Il link da raggiungere lo conosco già al momento di caricare la pagina
perchè è calcolato da php attraverso alcune variabili di sessione e
supponiamo ad esempio che sia "
http://www.xxx.com/pagina.php?id=5
".
Mi serve sapere cosa devo scrivere nel html della pagina (ed
eventualmente cosa modificare in "mioscript.js") affinchè, alla
pressione del tasto freccia dx, venga eseguita la funzione alertkey()
definita nel file "mioscript.js" passando il valore "pagina.php?id=5"
alla variabile yyy.
Si può fare una cosa del genere o devo mantenere la soluzione attuale
che consiste nello scrivere direttamente nella pagina html
(dinamicamente tramite php) tutto il listato dello script (e quindi
senza richiamare file javascript esterni)? 
Grazie.

 livello di sintassi perchè javascript lo conosco pochissimo.
da php scrivi solo la var globale e usa quella, del tipo:
da php scrivi
<script type="text/javascript">
 tuolink="www....";
</script>
e nel tuo file esterno
 window.location.href=tuolink;
-- 
"That until there is no longer first class
And second class citizens of any nation
Until the colour of a man's skin
Is of no more significance than the colour of his eyes
Me say war"
B.M.

 
Era proprio questo che intendevo. Grazie.




Avevo capito che ti sembrava "poco elegante" mettere del codice javascript
direttamente nel listato html ( vedasi tuo post del 14/12  ), preferendo
tenerlo in un file esterno. Avevo escluso tale possibilità da lì in avanti.
Per questo ti avevo proposto, ad esempio, l'approccio DOM:
<input type="hidden" id="page-id" value="<?php echo $id?>" />
Sempre spaghetti-code è, ma - appunto - tieni tutto il codice js esterno al
documento.
-- 
~ "E' impossibile svegliare chi fa finta di dormire."
(Proverbio navaho)