Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    ricerca numerica graduale con le regExp

    Salve a tutti..

    Avrei un piccolo problemino,

    In un campo text inserendo dei codici numerici dovrei poter selezionare automaticamente i valori di una select

    Il tutto dovrei poterlo fare con una regExp perchè ho la necessità che prima di consentire la selezione, devo essere sicuro che quel dato esista.

    Ora quindi so che mi devo creare una regExp e che al ciclo per il controllo sui value della select mi faccia il test con la regExp.

    Ovviamente prendendo ad esempio i seguenti value:
    1, 12, 125, 2, 3, 35, 4, 5, 756, 834

    devo poter essere in grado di poter inserire il codice anche in modo graduale ovvero se digito nel campo di text la cifra 1 mi trova il codice, digitando ancora a seguire il 2 mi trova il 12 e va bene, poi continuando digito anche il 5 e lui mi trova il 125 e va ancora bene ok??

    a questo punto se provo a digitare (dopo aver resettato il precedente valore) la cifra 7 mi dice che non trova nulla quando invece io devo avere la possibilità di continuare a scrivere codice con il 5 e con il 6 (756) e lo stesso se digito la cifra 8 (se intendo scrivere 834)

    questo è quello che ho fatto io ma mi rendo conto che forse ho scritto caxxate

    var CODE = FieldFROM.value;
    regexp = new RegExp('^('+CODE+')([0-9]*)?');
    //CODE è ovviamente il codice digitato nel campo di text
    var xTHIS = document.getElementById(MIA_SELECT);
    for(var i=0; i<xTHIS.length; i++) {
    if(regexp.test(xTHIS.options[i].value)) {
    //fai quello devi fare ovvero selezione della opzione nella select
    }
    }


    mi potete sbrogliare questa matassa?

    Grazie mille
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    copia e incolla questo esempio

    codice:
    <script>
    
    function addSearchListener() {
        var c = document.getElementById('cerca');
        c.onkeyup = function() {
            document.getElementById('errormsg').innerHTML = '';
            document.getElementById('warnmsg').innerHTML = '';
            findOnSelect('listavalori', this.value);    
        };
    };
    
    function findOnSelect(sel, value) {
        var s = document.getElementById(sel);
        var opts = s.getElementsByTagName('option');
        resetPrevSelectedValue(s);
        matchValue(opts, value);
    };    
    
    function resetPrevSelectedValue(s) {
        var opts = s.getElementsByTagName('option')
        for (i=0; i<opts.length; i++) opts[i].removeAttribute('selected');
        s.selectedIndex = 0;
    };
    
    function matchValue(opts, value) {
        var nomatch = true;
        var othervalues = false;
    
        var re = new RegExp("^"+value+"$");
        var reall = new RegExp("^"+value);
        var renext = new RegExp("^"+value+"[0-9]");
        
        
        for (i=0; i<opts.length; i++) {
            if (opts[i].value.match(reall)) {
                nomatch = false;
                break;
            }
        }
        
        if (nomatch) {
            document.getElementById('errormsg').innerHTML = 'Sorry, no match for ['+ value +']';
            return;
        }
           
    
        for (i=0; i<opts.length; i++) {
            if (opts[i].value.match(re)) {
                opts[i].selected = 'selected';
                break;
            }
        }
        
        for (i=0; i<opts.length; i++) {
            if (opts[i].value.match(renext)) {
                othervalues = true;
                break;
            }
        }
        
        if (!othervalues) {
            document.getElementById('warnmsg').innerHTML = 'No more options match with ['+ value +']';        
        }
        
    
    };
    
    
    window.onload = function() {
      addSearchListener();
    };
    
    
    
    </script>
    
    
    <body>
    
        <span id="errormsg" style="font: 10px Verdana; color: #c33"></span>
        <span id="warnmsg" style="font: 10px Verdana; color: #3c3"></span>
        
    
    
        <input type="text" id="cerca" />
        
    
    
    
        <select name="listavalori" id="listavalori">
            <option value="">No value match</option>
            <option value="1">1</option>
            <option value="12">12</option>
            <option value="125">125</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="35">35</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="756">756</option>
    
        </select>
    </body>
    Ciao
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    uauuuuuuhhh!! VVoVe:

    ed io che credevo di riuscire a cavarmela con 4 righe spelacchiate di codice!

    beh! ti ringrazio moltissimo e ti confermo che funziona alla grande...
    ola..
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  4. #4
    ariciao....

    senti un paio di curiosità potresti togliermele??

    Perchè alla fine delle funzioni hai inserito il punto-e-virgola????

    Sarebbe (necessaria/possibile) una modifica del tipo...

    Ho sempre i due campi (text e select) ma in realtà mi sono dimenticato di dire che ho altri due campi (text e select) e una volta selezionata la prima select, la seconda si auto-popola da un'array di dati creato in precedenza.

    Ovviamente anche il secondo text deve agire com il primo solo che agisce sulla seconda select

    Visto che la funzione parte con il window.onload mi può creare problemi il fatto che popolo la seconda select in automatico??

    La funzione con cui popolo la seconda select dive la posso sistemare?? e come gli passo i tre dati che devo passargli??

    Grazie ancora e spero di non abusare della tua pazienza e gentilezza.

    Notte se stai già a nanna....io rimango ancora un po se tu dovessi essre ancora sveglio
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  5. #5
    ok ci sono quasi l'unica cosa è che non riesco ancora a farlo interagire con il secondo select!

    adesso ci riprovo
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

  6. #6
    perfetto!! adesso si è tutto a posto ed ho addirittura inserito delle immagini anzichè le diciture dei messaggi di ricerca.

    fcaldera sei un grande!
    www.skorpiograph.com - [ PORTFOLIO ]
    ...se vuoi essere aiutato devi aiutare chi ti aiuta ad aiutarti!!!

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.