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

    jQuery - Autocomplete con Valori Multipli

    Salve..
    Vorrei ottenere un campo Autocomplete dove poter cercare ad esempio un cliente sia tramite il nome sia tramite il suo codice, ma facendo visualizzare soltanto il nome..
    Come potrei fare?
    Un esempio potrebbe essere questo:
    Codice PHP:
    <select name="linguaggio" id="combobox">
    <
    option value="1234">PHP</option>
    <
    option value="4321">Python</option>
    <
    option value="3241">Ruby</option>
    <
    option value="4312">Scala</option>
    <
    option value="2341">Scheme</option>
    </
    select

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Sicuro sia chiaro? Letto e riletto ma non ho capito cosa vuoi fare.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Quote Originariamente inviata da Luigi636 Visualizza il messaggio
    Salve..
    Vorrei ottenere un campo Autocomplete dove poter cercare ad esempio un cliente sia tramite il nome sia tramite il suo codice, ma facendo visualizzare soltanto il nome..
    Come potrei fare?
    Un esempio potrebbe essere questo:
    Codice PHP:
    <select name="linguaggio" id="combobox">
    <
    option value="1234">PHP</option>
    <
    option value="4321">Python</option>
    <
    option value="3241">Ruby</option>
    <
    option value="4312">Scala</option>
    <
    option value="2341">Scheme</option>
    </
    select
    Ciao,
    non so se esiste un modo più rapido, magari manipolando qualche libreria tipo autocomplete jquery si riesce con poco, ma non avendolo mai fatto non so dirti di più, ma in ogni caso puoi sempre farti il tuo autocomplete in questo modo:

    codice:
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <meta charset="utf-8" />
        <script src="Scripts/plugins/jquery-1.6.4.min.js"></script>
        <script>
            $.fn.autoCompletamento = function (opzioni) {
                if (!String.prototype.startsWith) {
                    String.prototype.startsWith = function (searchString, position) {
                        position = position || 0;
                        return this.substr(position, searchString.length) === searchString;
                    };
                }
                var self = this[0];
                var input = self.getElementsByTagName("input")[0];
                var ul = self.getElementsByTagName('ul')[0];
                var img = self.getElementsByTagName('img')[0];
                var span = self.getElementsByTagName('span')[0];
                var ultimoDGT = 0;
                var vettore = [];
                $(input).keypress(function () {
                    setTimeout(function () {
                        var queryValue = $(input).val();
                        if (ultimoDGT == queryValue.length)
                            return;
                        ultimoDGT = queryValue.length;
                        opzioni.testo = queryValue;
                        impostaOpzioni();
                        if (vettore.length > 0) {
                            input.focus();
                            input.value = vettore[0].isID ? vettore[0].value.toString() : vettore[0].text;
                            input.setSelectionRange(ultimoDGT, input.value.length);
                            span.innerText = vettore[0].text;
                        }
                        else
                            span.innerText = queryValue;
                    }, 30);
                });
                input.addEventListener("focus", function (value) { ul.style.visibility = "visible"; span.style.visibility = "hidden"; input.select(); });
                input.addEventListener("blur", function () {
                    setTimeout(function () {
                        ul.style.visibility = "hidden";
                        span.style.visibility = "visible";
                        span.focus();
                    }, 150);
                });
                input.addEventListener("keyup", function (event) {
                    ul.style.visibility = "visible";
                    if (event.keyCode == 46 || event.keyCode == 8)
                        $(input).keypress();
                });
                img.addEventListener("click", function (item) {
                    var invisible = ul.style.visibility == "hidden";
                    ul.style.visibility = invisible ? "visible" : "hidden";
                    if (invisible)
                        input.value = "";
                    $(input).keypress();
                });
                span.addEventListener("click", function (item) {
                    setTimeout(function () {
                        span.style.visibility = "hidden";
                        input.focus();
                    }, 30);
                });
                impostaOpzioni();
                function impostaOpzioni() {
                    ul.innerHTML="";
                    vettore = cerca(opzioni.source, opzioni.testo);
                    for (var i = 0; i < vettore.length; i += 1) {
                        var opt = document.createElement('li');
                        opt.innerHTML = vettore[i].text;
                        opt.addEventListener("click", function (item,a) {
                            input.value = item.target.innerText;
                            setTimeout(function () {
                                $(input).keypress();
                                setTimeout(function () { ul.style.visibility = "hidden"; span.style.visibility = "visible"; span.focus(); }, 30);
                            }, 10);
                        });
                        ul.appendChild(opt);
                    }
                }
                function cerca(vettore, valore) {
                    var risultato = [];
                    if (!valore || valore == "")
                        return vettore;
                    for (var i = 0; i < vettore.length; i += 1) {
                        if (vettore[i].text.toUpperCase().startsWith(valore.toUpperCase()) ||
                            vettore[i].value.toString().toUpperCase().startsWith(valore.toUpperCase())) {
                            vettore[i].isID = vettore[i].value.toString().startsWith(valore);
                            risultato.push(vettore[i]);
                        }
                    }
                    return risultato;
                }
                return self;
            }
        </script>
        <style>
            .autoCompletamento {
                position: relative;
                width:100px;
            }
            .autoCompletamento span{
                position: absolute;
                top: 0;
                left: 0;
                right:0;
                height:18px;
                width:100px;
                border-style: groove;
                border-width: 1px;
                background-color:whitesmoke;
                z-index: 11;
            }
            .autoCompletamento ul {
                position: absolute;
                border-width:inherit;
                top: 3px;
                left: 0;
                z-index: 12;
                width:100px;
                border-style: groove;
                border-width: 1px;
                visibility:hidden;
                background-color:whitesmoke;
                list-style-type: none;
                padding: 0;
            }
            .autoCompletamento li
            {
                position: relative;
                margin-left:0px;
                padding-left:0px;
                cursor:pointer;
            }
            .autoCompletamento li:hover
            {
                background-color:#a8a8a8;
            }
            .autoCompletamento input {
                position: absolute;
                top: 0px;
                left: 0;
                right:0;
                padding-right:30px;
                width:68px;
                border-style: groove;
                z-index: 10;
            }
            .autoCompletamento img {
                position: absolute;
                top:0px;
                right:0px;
                margin-right:-3px;
                display:inline-block;
                width:20px;
                height:18px;
                border-style: groove;
                border-width: 1px;
                background-color:whitesmoke;
                z-index: 11;
            }
        </style>
    </head>
    <body>
        <div class="autoCompletamento" id="auto1">
            <span></span>
            <input type="text"/>
            <img src="images/Drop_Down.png" />
            <ul/>
        </div>
        <script>
           $("#auto1").autoCompletamento({
                source: [
                    { value: 1234, text: 'PHP' },
                    { value: 4321, text: 'Python' },
                    { value: 3241, text: 'Ruby' },
                    { value: 4312, text: 'Scala' },
                    { value: 2341, text: 'Scheme' }
                ]
            });
        </script>
    </body>
    </html>
    In pratica copro la textbox (dove puoi scrivere il sia il testo che il valore) con uno span che conterra il testo (e mai l'id), quest'ultimo quando cliccato viene nascosto per mostrare la textbox sottostante e restituirli il focus. A questo punto sia quando il textbox ottiene il focus, sia quando premi un tasto, il sistema controlla le eventuali corrispondenze del testo della textbox, sia nel valore e sia nel testo dell'elemento (es: value:1234, text:'PHP' può essere chiamato con 1... oppure con p..., è indifferente), una volta filtrate tutte le entità che iniziano con il testo o id selezionato, vengono mostrati gli elementi corrispondenti nella tendina, inoltre il testo viene completato e viene selezionata la parte completata (es: scrivo 1 e seleziona il testo da 234, in modo che posso continuare a scrivere senza cancellare) automaticamente tramite il primo elemento corrispondente, in questo modo basta che la casella perda il focus per far comparire di nuovo lo span con il nome (mostra a video sempre e solo il nome dell'elemento selezionato una volta usciti dal focus) dell'elemento selezionato.

    trovi un esempio funzionante qui

    Ovviamente vuole essere solo uno spunto, e i css non sono affatto precisi, ma non dovrebbe essere difficile sistemarli. la parte js dovrebbe sunzionare, ma va migliorata e testata.

  4. #4
    Quote Originariamente inviata da U235 Visualizza il messaggio
    Ciao,
    non so se esiste un modo più rapido, magari manipolando qualche libreria tipo autocomplete jquery si riesce con poco, ma non avendolo mai fatto non so dirti di più, ma in ogni caso puoi sempre farti il tuo autocomplete in questo modo:

    In pratica copro la textbox (dove puoi scrivere il sia il testo che il valore) con uno span che conterra il testo (e mai l'id), quest'ultimo quando cliccato viene nascosto per mostrare la textbox sottostante e restituirli il focus. A questo punto sia quando il textbox ottiene il focus, sia quando premi un tasto, il sistema controlla le eventuali corrispondenze del testo della textbox, sia nel valore e sia nel testo dell'elemento (es: value:1234, text:'PHP' può essere chiamato con 1... oppure con p..., è indifferente), una volta filtrate tutte le entità che iniziano con il testo o id selezionato, vengono mostrati gli elementi corrispondenti nella tendina, inoltre il testo viene completato e viene selezionata la parte completata (es: scrivo 1 e seleziona il testo da 234, in modo che posso continuare a scrivere senza cancellare) automaticamente tramite il primo elemento corrispondente, in questo modo basta che la casella perda il focus per far comparire di nuovo lo span con il nome (mostra a video sempre e solo il nome dell'elemento selezionato una volta usciti dal focus) dell'elemento selezionato.

    trovi un esempio funzionante qui

    Ovviamente vuole essere solo uno spunto, e i css non sono affatto precisi, ma non dovrebbe essere difficile sistemarli. la parte js dovrebbe sunzionare, ma va migliorata e testata.
    Perfetto..!
    Grazie mille

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.