Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 32
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    184

    Gestione OnKey per cambio riga in tabella in JS

    Partendo dal presupposto che non sono un veterano del Js, ma mi occupo quasi totalmente di PHP, cerco di farVi una domanda davvero strana. Se risulta una fesseria vi chiedo scusa, altrimenti ......

    Basta con i preamboli, immaginiamo di avere una tabella con 31 colonne (i giorni di un mese) e 8 righe. Se io volessi cambiare colonna, spingo il tasto TAB e buona notte, ma se io volessi cambiare riga? Se lo volessi fare con il tasto PGDW (ieKey = 34), come posso fare ?
    E' possibile indicare in JS che l'evento onKeyPress, verifica il valore del tasto e se questo corrisponde a 34, attivo una funzione tale che in relazione al ID dove in quel momento sono creo un criterio (es. ID numerico --> dest. ID + 31) che mi porti esattamente alla riga successiva ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    184

    Ah dimenticavo ..............

    Ah dimenticavo .............. sto parlando di un form, e quindi sto cambiando riga in un tabella, nel senso che passo da un INPUT TEXT con un certo ID ad un altro.

  3. #3
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Ciao kekkosf,

    dimmi se c'ho azzeccato....
    hai 8 righe e 31 colonne per un totale 248 input text
    il nome dei vari text avrà un prefisso e un numero che va da 1 a 248
    tipo txt1,txt2,...txt248
    con il tab ci si sposta nelle colonne (è così di default) e con PgDown e PgUp ci si sposta nelle righe
    Lo facciamo compatibile NN? Facciamolo...
    nell'head della pagina metti
    codice:
    <script language="javascript">
    var isNav=false
    if (parseInt(navigator.appVersion)>=4){
    	if(navigator.appName == "Netscape"){
    		window.captureEvents(Event.ONKEYPRESS)
    		window.onkeypress = prova
    		isNav = true
    	}
    	else
    		document.onkeydown = prova
    }
    
    var pos=null
    var prefisso='txt'
    function prova(e){
    	if(pos!=null){
    		num = parseInt(pos.substr(prefisso.length))
    		if(isNav){
    			if (e.keyCode == 34) {
    				if(num<218)num=num+31
    				else num=num+31-248
    			}
    			if (e.keyCode == 33) {
    				if(num>31)num=num-31
    				else num=num-31+248
    			}
    		}
    		if (window.event.keyCode == 34) {
    			if(num<218)num=num+31
    			else num=num+31-248
    		}
    		if (window.event.keyCode == 33) {
    			if(num>31)num=num-31
    			else num=num-31+248
    		}
    		pos = prefisso+num
    		document.forms[0].elements[pos].focus()
    	}
    }
    </script>
    gli input devono essere così
    codice:
    <input type="text" name="txt1" onfocus="pos=this.name">
    se il prefisso degli input non è txt puoi modificarlo nella variabile prefisso

    ci siamo? Famme sape'

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    184
    Lo script è perfettamente perfetto!

    Solo che voglio renderlo più adatto alle mie esigenze se possibile.
    Ovvero, io ho già una procedura di salvataggio tale che se dovessi trattare con "txt" i nomi dovrei rifarla (non sarebbe un problema da poco ma neanche insormontabile), perciò volevo chiederti se era possibile gestire degli ID al posto dei NAME.

  5. #5
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    Se vuoi usare l'id invece del nome è la stessa cosa... se vuoi cambiare il prefisso ad esempio pippo1,pippo2,... pippo248 basta fare gli input così
    codice:
    <input type="text" id="pippo1" onfocus="pos=this.id">
    e impostare la variabile prefisso
    codice:
    var prefisso='pippo'
    nella funzione prova è meglio mettere un else per separare il codice per NN da quello per IE
    codice:
    function prova(e){
    	if(pos!=null){
    		num = parseInt(pos.substr(prefisso.length))
    		if(isNav){
    			if (e.keyCode == 34) {
    				if(num<218)num=num+31
    				else num=num+31-248
    			}
    			if (e.keyCode == 33) {
    				if(num>31)num=num-31
    				else num=num-31+248
    			}
    		}
    		else{
    			if (window.event.keyCode == 34) {
    				if(num<218)num=num+31
    				else num=num+31-248
    			}
    			if (window.event.keyCode == 33) {
    				if(num>31)num=num-31
    				else num=num-31+248
    			}
    		}
    		pos = prefisso+num
    		document.forms[0].elements[pos].focus()
    	}
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    184

    Ma passiamo oltre ........

    Assodato che questo script funziona alla grande e che adesso gestisco nche il pulsante F) su alcune celle abilitate mediante un controllo sul numero dell'ID, avrei la necessità di aggiornare i totali di riga in un ultima colonna della tabella che però non è una casella di Testo inputabile ma deve essere solo un testo in continuo aggiornamento.

    L'evento per collegare questa sommatoria penso sia OnBlur, dove ogni volta che cambio casella di input fa una sommatoria di riga.
    Adesso le cose che non so dello script sono :

    - Come si fa a definire un testo normale in modo tale da renderlo sempre aggiornabile ?
    - Si possono collegare più eventi ad una casella di INPUT ?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188

    Re: Ma passiamo oltre ........

    Originariamente inviato da kekkosf
    - Come si fa a definire un testo normale in modo tale da renderlo sempre aggiornabile ?
    - Si possono collegare più eventi ad una casella di INPUT ?
    1. La soluzione crossbrowser e` quella di usare un campo di input (che puoi mascherare da testo normale con i CSS, dove supportati), altrimenti devi usare un oggetto tipo <div> o <span> e usare il metodo .innerHTML() su tale oggetto (funziona nei browser moderni).

    2. Si puo`, ma con molta cautela, in modo che non ci siano conflitti (dipende quindi da che eventi vai ad inserire). In generale e` preferibile chiamare piu` funzioni con lo stesso evento:
    <input ... onchange="cambiaaltro(); faiquestaltro();">

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    184
    la casella di input è così :

    echo "<input type = \"Text\" Name = \"OrOr[$giorni]\" id = \"txt".$pos."\" Value = \"".CntPDF($VetOre[$giorni][0],$False,"")."\" Size = \"3\" MAXLENGTH = \"4\" onfocus = \"pos=this.id\" style=\"background=$col_set[$indice_colori];color=$color;\">";

    adesso dopo l'onfocus, metterei onblur.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    184

    Re: Ma passiamo oltre ........

    Originariamente inviato da kekkosf
    Assodato che questo script funziona alla grande e che adesso gestisco nche il pulsante F) su alcune celle abilitate mediante un controllo sul numero dell'ID, avrei la necessità di aggiornare i totali di riga in un ultima colonna della tabella che però non è una casella di Testo inputabile ma deve essere solo un testo in continuo aggiornamento.

    L'evento per collegare questa sommatoria penso sia OnBlur, dove ogni volta che cambio casella di input fa una sommatoria di riga.
    Adesso le cose che non so dello script sono :

    - Come si fa a definire un testo normale in modo tale da renderlo sempre aggiornabile ?
    - Si possono collegare più eventi ad una casella di INPUT ?
    Non sono un'esperto di Js e vicini. Diciamo che navigo in un ignoranza pratica grandissima, anche se concettualmente non sono distante anni luce.
    Purtroppo alcune vicissitudini e impegni lavorativi hanno fatto sì che la mia vita sia solo PHP, perciò quando mi chiedono lavorazioni lato-client sono in TILT!


  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da kekkosf
    adesso dopo l'onfocus, metterei onblur.
    Onblur e` il contrario di onfocus. Non ci sono problemi di sovrapposizioni. Vai tranquillo.

    Ciao
    Michele
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.