Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    controllo onblur del valore inserito

    Premetto che lavoro ad un progetto accessibile solamente da me e i miei familiari utilizzando pochi computer predefiniti.

    Al passaggio resosi ormai necessario a Explorer 8 (lo sò che ci sono browser migliori ma devo utilizzare quello), alcuni script come il sottoriportato, non mi funzionano più:


    function controllo_stringa_solo_lettere_o_niente(variabile) {
    var v=document.getElementById(variabile);
    var set_caratteri_validi, numero_caratteri_validi;
    set_caratteri_validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw xyz";
    numero_caratteri_validi=0;
    if (v.value.length != 0) {
    for (i=1; i<=v.value.length; i+=1) {
    for (j=1; j<=set_caratteri_validi.length; j+=1) {
    if (v.value.substring(i,i-1)==set_caratteri_validi.substring(j,j-1)) { numero_caratteri_validi=numero_caratteri_validi+1; }
    }
    }
    if (v.value.length==numero_caratteri_validi) {
    return true;
    } else {
    alert('Devono essere inseriti necessariamente solo caratteri alfabetici.');
    v.select();
    v.focus();
    return false;
    }
    } else {
    return true;
    }
    }

    Un'altro script all'evento onkeypress mi verifica che siano inseriti solo determinati caratteri,mentre questo all'evento onblur di controllare che non si lasciasse il campo se vi fossero caratteri non desiderati (inseriti magari con un copia incolla).

    La parte incriminata è probabilmente quella in blu. Qualcuno sà aiutarmi tenendo presente che gradierei non modificare il form se non per i parametri passati alla function?
    Prima o poi anch'io vi insegnerò qualcosa

  2. #2
    Scusate ma sono bloccato su questa cosa, il mio lavorosi base sull'inserimento obbligatorio di dati specifici e quindi necessito di risolvere questo problema. Il mio script faceva esattamente al caso mio anche se riconosco probabilmente in modo molto spartano.

    Ho modificato il tutto in:

    function prova(variabile) {
    var _valore=variabile.value;
    var _nome=variabile.name;
    var set_caratteri_validi, numero_caratteri_validi;
    set_caratteri_validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvw xyz";
    numero_caratteri_validi=0;
    if (_valore.length != 0) {
    for (i=1; i<=_valore.length; i+=1) {
    for (j=1; j<=set_caratteri_validi.length; j+=1) {
    if (_valore.substring(i,i-1)==set_caratteri_validi.substring(j,j-1)) {
    numero_caratteri_validi=numero_caratteri_validi+1;
    }
    }
    }
    if (_valore.length==numero_caratteri_validi) {
    //* alert('Tutto ok.');
    } else {
    alert(_nome+'Caratteri errati.');
    document.form1 .textfield .focus();
    document.form1 .textfield .select();
    }
    } else {
    //* alert('Non ci sono caratteri inseriti.');
    }
    }

    e nello specifico caso che il form si chiami form1 e il campo si chiami textfield, il tutto funge come vorrei.

    Immagino che sia una cosa banale, ma come modifico i valori in blu per permettere allo script di funzionare anche su altri "nomi_form" e altri "nomi_textfield"? Avevo pensato di passarglieli comeho fatto con "variabile", ma ho provato in ogni modo e
    Prima o poi anch'io vi insegnerò qualcosa

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Utilizza la funzione eval di javascript... ti faccio un esempio:

    var nomeForm = 'form1'
    var nomeCampo = 'textfield';


    eval("document."+nomeForm+"."+nomeCampo+".focus(); ");
    eval("document."+nomeForm+"."+nomeCampo+".select() ;");

    Praticamente ho fatto la stessa cosa che fai tu con "document.form1 .textfield .focus();" ma ho utilizzato due variabili che puoi valorizzare a tuo piacimento.

  4. #4
    Innanzitutto ti ringrazio per l'interessamento.

    Poi aggiungo che mettendo

    document.getElementById(_nome).focus();
    document.getElementById(_nome).select();

    e ovviamente assegnando l'id all'inputtext,

    mi funziona. Boo, i casi della vita.

    Anche con il tuo

    eval("document."+nomeForm+"."+nomeCampo+".focus(); ");
    eval("document."+nomeForm+"."+nomeCampo+".select() ;");

    funge ma non ho provato se posso passargli automaticamente il nome del form e del campo quando richiamo la function, e non staticamente dentro lo script.

    In ogni caso, non mi dispiacerebbe sapere che cosa fà in più eval, sai per le prossime volte...
    Prima o poi anch'io vi insegnerò qualcosa

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Certo va bene anche come hai postato tu! La funzione eval ti permette di costruire delle espressioni "particolari" altrimenti impossibili da realizzare, rendendo quindi dinamici alcuni procedimenti.

    n = 10
    for (var i = 1; i < n; i++)
    {
    eval("var numero_" + i + " = 'Variabile numero " + i + "'");
    }
    document.write(numero_5);

    Qui per esempio ho creato dinamicamente n variabili... e stampo a video la variabile numero_5 che come vedi non ho mai dichiarato normalmente ma che esiste perche creata con il metodo eval... su internet trovi sicuramente un spiegazione piu dettagliata...

  6. #6
    Allora, e con questo chiudo perchè non voglio monopolizzare il forum:

    Dopo varie modifiche di aggiustamento alle mie esigenze, lo script non mi funzionava più, causa varie e troppe interruzioni con conseguenti dimenticanze ed errori.

    Ho quindi trovato la soluzione (credo) definitiva e riscritto lo script e il modo con qui lo richiamo nel seguente modo, se può servire a qualcuno ne sono felice:

    function LET(inputtext,form) {
    var set_caratteri_validi, numero_caratteri_validi;
    var set_caratteri_validi="ABCDEFGHIJKLMNOPQRSTUVWXYZab cdefghijklmnopqrstuvwxyz";
    var errore="Caratteri errati.";
    var _valore=inputtext.value;
    var _nome=inputtext.name;
    var numero_caratteri_validi=0;
    if (_valore.length != 0) {
    for (i=1; i<=_valore.length; i+=1) {
    for (j=1; j<=set_caratteri_validi.length; j+=1) {
    if (_valore.substring(i,i-1)==set_caratteri_validi.substring(j,j-1)) {
    numero_caratteri_validi=numero_caratteri_validi+1;
    }
    }
    }
    if (_valore.length==numero_caratteri_validi) {
    /* alert('Tutto ok.'); */
    } else {
    alert(errore);
    eval("document."+form+"."+_nome+".focus();");
    eval("document."+form+"."+_nome+".select();");

    }
    } else {
    /* alert('Non ci sono caratteri inseriti.'); */
    }
    }

    e lo richiamo così:

    <form name="form1" method="post" action="">
    <input type="text" id="id_textfield" name="textfield" onblur="LET(this,'form1 ');">
    </form>

    ovvio, che si necessita di specificare quando si richiama la funzione, il nome del form (colore rosso) e di assegnare un id, identico al nome del campo antecedendo "id_".

    Se non vi torna qualcosa scrivete che vi rispondo


    ahahahahahaha devo èssere ubriaco per pretendere di insegnare qualcosa
    Prima o poi anch'io vi insegnerò qualcosa

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    figurati abbiamo tutti da imparare

    cmq riguardando tutta la funzione mi sembra un po' troppo articolata per fare un semplice controllo sui caratteri... io l'avrei fatta cosi':

    function LET(inputtext,form) {
    var set_caratteri_validi;
    var set_caratteri_validi="ABCDEFGHIJKLMNOPQRSTUVWXYZab cdefghijklmnopqrstuvwxyz";
    var errore="Caratteri errati.";
    var _valore=inputtext.value;
    var _nome=inputtext.name;
    for (i=0; _valore.length > 0 && i<_valore.length; i++) {
    if(set_caratteri_validi.indexOf(_valore.charAt(i)) == -1){
    alert(errore);
    setTimeout(function(){eval("document.forms['"+form+"']."+_nome+".focus();");eval("document.forms['"+form+"']."+_nome+".select();")},10);
    break;
    }
    }
    }

    il setTimeout l'ho utilizzato solo per firefox che ha un bug su questo metodo, infatti se provi la funzione che hai fatto tu il focus su firefox non funzionerà...

  8. #8
    La mia funzione, a distanza di tempo è diventata questa:

    function LET_O_NIENTE(inputtext,form) {
    var set_caratteri_validi, numero_caratteri_validi;
    var set_caratteri_validi="ABCDEFGHIJKLMNOPQRSTUVWXYZab cdefghijklmnopqrstuvwxyz";
    var errore="I caratteri consentiti sono:\n[A-Z];";
    var _valore=inputtext.value;
    var _nome=inputtext.name;
    var numero_caratteri_validi=0;
    if (_valore.length!=0) {
    for (i=1; i<=_valore.length; i++) {
    for (j=1; j<=set_caratteri_validi.length; j++) {
    if (_valore.substring(i,i-1)==set_caratteri_validi.substring(j,j-1)) {
    numero_caratteri_validi++;
    }
    }
    }
    if (_valore.length==numero_caratteri_validi) {
    /* alert('I caratteri inseriti sono OK.'); */
    } else {
    alert(errore); eval("document."+form+"."+_nome+".focus();"); eval("document."+form+"."+_nome+".select();");
    }
    } else {
    /* alert('Non ci sono caratteri inseriti.'); */
    }
    }

    e la richiamo con

    onBlur='return LET_O_NIENTE(this,this.form.name);'

    E' tutto ok se la utilizzo su semplici

    <input type='text' name='campo' maxlength='200' onBlur='return LET_O_NIENTE(this,this.form.name);'>

    ma laddove avessi invece bisogno di usare una textarea

    <textarea type='text' rows='6' cols='99' maxlength='1000' name='campo' onBlur='return LET_O_NIENTE(this,this.form.name);'></textarea>

    lo script mi dà errore (su onblur) se nella scrittura del testo vado a capo con il tasto invio.

    Suggerimenti?
    Prima o poi anch'io vi insegnerò qualcosa

  9. #9
    non carica le risposte - questa si ma non so come mai

  10. #10
    oh perchè non usi le espressioni regolari?

    <input type="text" onblur='return LET_O_NIENTE(this);' />
    <text-area type='text' rows='6' cols='99' maxlength='1000' name='campo' onblur='return LET_O_NIENTE(this);'></tex-tarea>


    function LET_O_NIENTE(inputtext, form){
    var foo=inputtext.value.match(/^[A-Za-z\s]+$/gm);
    alert(foo)
    if(!foo){alert('errore'); inputtext.select(); return false;}
    return true;
    }

    ps constato che nelle risposte non può stare il tag textarea per cui devi rimpiazzarlo nel codice togliendo il trattino text-area

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.