Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087

    accessibilità e controllo form

    poniamo questo problema di accessibilità e form:
    non possiamo mettere alcun comando di javascript all'interno dei tag XHTML.
    Lo script va sun un foglio.js
    Ora poniamo che, all' onChange, io voglia far rendere minuscole tutte le lettere nel "value" degli input type='text' e questo perchè .. probabilmente i dati devono essere processati anche in un db case sensitive
    Ho preparato questi script che non fungono [mannaggia all'onChange]
    codice:
        window.onload = function() {
           if(document.getElementsByTagName) {
               min(); }  }
    
          function min() {
      var inp = document.getElementsByTagName('input');
        for(var i=0; i<inp.length;i+=1) {
            if(inp[i].type == 'text') {
                 var minuscolo = inp[i].value.toLowerCase();
       if(inp[i].onChange) {
        inp[i].onChange = minuscolo;
        }   }  } }
    SCRITTO 2
    codice:
       window.onload = function() {
       if(document.getElementsByTagName) ;
               min(); }  
    
          function min() {
      var inp = document.getElementsByTagName('input');
        for(var i=0; i<inp.length;i+=1) {
            if(inp[i].type == 'text') {
            inp[i].onchange = function(){this.value.toLowerCase()}
        }   } }
    C'è qualcuno che realisticamente riesce a trovarmi il BUG e darmi una risposta certa?

  2. #2
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    up!

  3. #3
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    riup ...porfavor!

  4. #4
    ciao
    sto imparando javascript,quindi potrei sbagliare.
    Nello scritto1:

    if(inp[i].type == 'text') {
    fin qua ci siamo;


    var minuscolo = inp[i].value.toLowerCase();
    qui ci dovrebbe essere un errore,perchè salvi nella var minuscolo una stringa vuota(o forse NULL, non saprei),infatti all'onload della pagina, nel campo considerato non c'è ancora niente....al max c'è il value che hai scritto tu nel codice del form,ma lo stesso è inutile ,messa lì.


    if(inp[i].onChange) {
    inp[i].onChange dovrebbe leggere e restituire le istruzioni presenti nell'onchange dell'elemento considerato(ad es. <input onChange="alert('ciao') />, in questo caso inp[i].onchange restituisce la stringa "alert('ciao')"),solo che in quel punto del codice gli onChange non sono ancora settati, quindi l'if controlla una stringa vuota(o una variabile NULL,non saprei).Forse quest'istruzione può essere utile per controllare se all'evento onchange corrisponde qualcosa, ma hai detto tu stesso che nell'xhtml non hai messo istruzioni javascript,quindi cosa controlli a fare se sono presenti istruzioni?


    inp[i].onChange = minuscolo;
    infine questa istruzione dovrebbe avere lo stesso effetto che se scrivessi direttamente nell'xhtml del form questa riga:<input type="text" value="Inserisci Il Tuo NOME" onChange="inserisci il tuo nome" />...


    ti ripeto,sono alle prime armi e potrei sbagliare, però ti suggerirei di dare una controllatina a questi errori.
    Magari prova con questo codice dentro il for:
    codice:
    if(inp[i].type == 'text') {
        inp[i].onChange = "javascript: this.value.toLowerCase()"}

  5. #5
    ho appena scoperto che l'evento da usare non è onChange ma onKeyPress,che agisce ogni volta che premi un tasto all'interno del campo text;poi avevo fatto anche un'altro errore...alla fine questo codice funziona:
    codice:
    if(inp[i].type == 'text') {
        inp[i].onKeyPress = "java script: this.value=this.value.toLowerCase()"}
    ha l'effetto che ogni volta che schiacci un tasto,ti cambia in minuscolo i caratteri precedenti,ma non l'ultimo carattere schiacciato,quindi alla fine non so se ti può essere utile uno script che non completa il suo lavoro...
    casomai puoi dare un id(o forse un name) all'elemento input che ti interessa, poi al tasto submit aggiungi un evento onMouseDown che porta in minuscolo il value dell'input con l'id che hai specificato...

    spero di essere stato chiaro e utile

  6. #6
    piccolo errore,io facevo le mie prove inserendo direttamente nell'xhtml il codice per gli eventi e funzionava tutto, invece sto avendo problemi a creare gli eveni tramite un javascript esterno ,che in fondo era anche il problema che mi ero ritrovato io oggi e per il quale ero venuto a farmi un giro sul forum

  7. #7
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    ciao ... space
    grazie per l'interessamento. Ho letto i tuoi interventi e ti rispondo per sommi capi (xchè sono lunghi!)
    var minuscolo = inp[i].value.toLowerCase();
    qui ci dovrebbe essere un errore,perchè salvi nella var minuscolo una stringa vuota(o forse NULL, non saprei),infatti all'onload della pagina, nel campo considerato non c'è ancora niente....al max c'è il value che hai scritto tu nel codice del form,ma lo stesso è inutile ,messa lì.
    nella funzione che non funzica c'è, all'onload, l'attivazione dell'onchange che è in attesa dell'evento (se avviene)
    [inp[i].onChange = minuscolo;] oppure [inp[i].onchange = function(){this.value.toLowerCase()}]
    Forse quest'istruzione può essere utile per controllare se all'evento onchange corrisponde qualcosa, ma hai detto tu stesso che nell'xhtml non hai messo istruzioni javascript,quindi cosa controlli a fare se sono presenti istruzioni?
    con i fogli esterni puoi caricare nella memoria del browser delle istruzioni e dei controlli su cose che sono già caricate nella stessa memoria e non necessariamente nella pagina.
    Mettere l'evento onchange nel tag input l'avevo già fatto e mi funzicava. Ho scritto questo:
    codice:
       window.onchange = function() {
       if(document.getElementsByTagName) {
               min(); }  }
    
    function min() {
          var inp = document.getElementsByTagName('input');
                for(var i=0; i<inp.length;i+=1) {
                   if(inp[i].type == 'text') 
              inp[i].value = inp[i].value.toLowerCase()
        }    }
    da mettere sempre in esterno, ma acc... funziona con Moz, Opera, firefox, ma non con il simpatico IE
    devo trovare sto IE cosa non supporta.
    ciao alla prossima

  8. #8
    alla fine ho trovato il codice giusto!!!
    funziona sia con ie6 che con firefox1.0(gli unici due su cui ho potuto testarlo).Per renderlo completamente conforme agli standard W3c avrei dovuto sostituire onblur con addEventListener('blur',funzione,true), ma ho letto che IE non supporta questo metodo,quindi...
    cmq l'errore che commettevo era scrivere onKeyPress, quando invece andava tutto in minuscolo.....
    codice:
     <script type="text/javascript">
      function min() {
       var inp = document.getElementsByTagName('input');
       for(var i=0; i<inp.length;i++)
    	 if(inp[i].type == 'text') inp[i].onblur= function(){this.value=this.value.toLowerCase()};}
      
      window.onload = function() {if(document.getElementsByTagName) min()}
     </script>
    al posto di onchange ho messo onblur, altrimenti c'erano dei casi in cui l'ultima lettera digitata rimaneva maiuscola, mentre così viene convertito tutto in minuscolo quando si esce fuori dal campo input(schiacciando TAB,ENTER o col mouse).

    alla fine dei conti era quasi giusto il tuo SCRITTO2,con solo l'errore che
    function(){this.value.toLowerCase()
    non fa in pratica niente,perchè toLowerCase() non modifica niente,ma restituisce una stringa,solo che quella stringa non viene assegnata a nessuno,mentre invece la si doveva assegnare a this.value, fare cioè this.value=this.value.toLowerCase().

    beh,credo che sia tutto ,adesso posso andarmene finalmente a dormire

    alla prox

  9. #9
    dopo questa vado sul serio a dormire
    codice:
    <script type="text/javascript">
     function inputTextToLowerCase(){
      forms=document.getElementsByTagName('form');
      if(!forms) return;
      for(var i=0;i<forms.length;i++)
       forms[i].onsubmit=function(){
                                   inp=this.getElementsByTagName('input');
                                   for(var i=0;i<inp.length;i++)
                                     if(inp[i].type=='text') inp[i].value=inp[i].value.toLowerCase()}}
     window.onload=function(){if(document.getElementsByTagName) inputTextToLowerCase()};
    </script>
    invece di agire sugli eventi dei campi input, setta un evento onsubmit per ogni form presente nella pagina.Una volta attivato,questo evento lancia una funzione che rende minuscoli tutti i campi text presenti all'interno del form su cui agisce.
    rispetto all'altro script ha il vantaggio (puramente estetico) che l'utente non vede cambiarsi in minuscolo ciò che aveva appena scritto,ma il passaggio a minuscolo avviene contemporaneamente per tutti campi text soltanto alla fine,all'invio del form.
    ariciao

    .....

  10. #10
    Utente di HTML.it L'avatar di *pragma
    Registrato dal
    Sep 2001
    Messaggi
    1,087
    ammazzate aoh! VVoVe:

    sei stato veramente bravo ...
    e meno male che stai imparando solo ora!

    grazie, ciao ed alla prossima

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 © 2025 vBulletin Solutions, Inc. All rights reserved.