• User Attivo

    Io l'ho fatto usando il plugin jquery: linkedSelect


  • User

    Ciao,
    ho provato, i risultati non sono proprio come mi aspettavo, è di una lentezza impressionante (forse per la grossa mole di dati da trattare) inoltre mi da un popup con un errore js.

    Grazie
    Nicola


  • User Attivo

    A me funziona benissimo, dipende come l'hai applicato, io ho tre select, la prima delle regioni è normale, selezionata la regione presento le provincie e poi i comuni:

    
    $(document).ready(function(){
    $('#provincia').linkedSelect('ajaxsave.php?ps=comune','#comune',{firstOption: 'Selezionare il comune', loadingText: 'Attendere...'});
    $('#regione').linkedSelect('ajaxsave.php?ps=provincia','#provincia',{firstOption: 'Selezionare la provincia', loadingText: 'Attendere...'});
    });
    
    

    ajaxsave.php mi torna i dati necessari.


  • User

    Ah c'è proprio il metodo linkedselect...
    Io invece ho cercato quella parola su google e ho trovato altro... che ho provato... con tutte le conseguenze che ti ho descritto.

    Ti sarei grato se mi posteresti il link alla libreria.

    Grazie mille
    Nicola


  • User

    Ho provato anche a cercarla tra i plugin sul sito ufficiale ma non me lo ha trovato 😞


  • User Attivo

    Effettivamente il sito non c'è più, ti posto il codice di jquery.linkedselect.js:

    
    (function($){
      $.fn.linkedSelect = function(url,destination,params) {
          var params = $.extend({
             firstOption : 'Please Select',
             loadingText : 'Loading...'
          },params);
          var $dest = $(destination);
          return this.each(function(){
            $(this).bind('change', function() {
                var $$ = $(this);
                $dest.attr('disabled','false')
           .append('<option value="">' +params.loadingText+ '</option>')
           .ajaxStart(function(){
            $$.show();
                });
                $.getJSON(url,{str: $$.val() }, function(j){
                   if (j.length > 0) {
                      var options = '<option value="">' +params.firstOption+ '</option>';
                      for (var i = 0; i < j.length; i++) {
                         options += '<option value="' + j*.optionValue + '">' + j*.optionDisplay + '</option>';
                      }
                   }
                  $dest.removeAttr('disabled')
            .html(options)
            .find('option:first')
            .attr('selected', 'selected');
                });
             });
          });
       };
    })(jQuery);
    
    

  • User

    Grazie mille.
    Ora provo... al max ti chiederò delle dritte sull'utilizzo.

    Dovrò modificare il js leggermente perchè in realtà io ho due combo e una textbox il cui valore è univocamente definito dalla scelta della seconda combo.

    Ti farò sapere.

    Grazie
    Nicola


  • User

    Ciao,
    finalmente ho trovato 5 minuti per provare questo codice.

    Sorge la prima domanda: in che modo la funzione (nel tuo caso ajaxsave.php) ti restituisce i valori?

    Grazie
    Nicola


  • User

    Ciao ho risolto,
    ho semplicemente modificato il js che mi hai postato adattandolo all'oggetto JSON che il mio script emette.


  • User

    Faccio un attimo il punto della situazione:
    ho brillantemente risolto il problema delle due linked select (seleziona provincia --> elenco province).
    Ora vorrei che selezionando un comune, nella textbox successiva vorrei visualizzare il cap, che è in corrispondenza 1 a 1 con il comune selezionato.
    Utilizzando la stessa linkedselect.js riesco a ricavarmi, dalla checkcap.php, il cap corretto attraverso un json message, ad esempio
    [{"txtValue" : "60020"}]Mi manca l'ultimo pezzettino... ovvero riuscire a visualizzarlo nella textbox.Come posso fare?


  • User Attivo

    Ciao,
    dovrebbe essere:

    [php]
    document.getElementById(idTextbox).value = il cap;
    [/php]Con JQuery:

    [php]
    $('#' + idTextbox).val(il cap);
    [/php]Ciao


  • User

    Eh purtroppo non è cosi facile, mi sono un po incasinato.
    Mi spiego:
    nella pagina principale ho questo codice

    
    $(document).ready(function(){
     
     $('#citta').linkedSelect('checkcap2.php','#cap');
     $('#provincia').linkedSelect('checkcomune2.php','#citta',{firstOption: 'Selezionare il comune', loadingText: 'Attendere...'}); 
    }
    
    

    La linked select è quella indicata da Senamion. Ho provato a modificarla in modo di passargli un ulteriore parametro 'isSelectBox' che vale 0 o 1 e mettere una if nella quale mi viene restituito

    
    $.getJSON(url,{str: $$.val() }, function(j){
                    if (j.length > 0) {
                       var options = '<option value="">' +params.firstOption+ '</option>';
                       for (var i = 0; i < j.length; i++) {
                          options += '<option value="' + j*.optionValue + '">' + j*.optionDisplay + '</option>';
                       }
                    }
                   $dest.removeAttr('disabled')
             .html(options)
             .find('option:first')
             .attr('selected', 'selected');
                 });
    
    

    Se si tratta di select box, oppure

    
    $dest.val()=j.txtValue;
    
    

    ..ma non va 😞


  • User Attivo

    Ciao,
    prova così:
    [PHP]
    $dest.val(j.txtValue);[/PHP]

    Ciao


  • User

    Ciao,
    l'ho modificata in questo modo ma non funziona....

    
    (function($){
      $.fn.linkedSelect = function(url,destination,params) {
          var params = $.extend({
             firstOption : 'Please Select',
             loadingText : 'Loading...'
          },params);
          var $dest = $(destination);
           
           return this.each(function(){
             $(this).bind('change', function() {
                 var $$ = $(this);
                 $dest.attr('disabled','false')
            .append('<option value="">' +params.loadingText+ '</option>')
            .ajaxStart(function(){
             $$.show();
                 });
                 
                 if(params.isSelectBox==1){
                 $.getJSON(url,{str: $$.val() }, function(j){
                    if (j.length > 0) {
                       var options = '<option value="">' +params.firstOption+ '</option>';
                       for (var i = 0; i < j.length; i++) {
                          options += '<option value="' + j*.optionValue + '">' + j*.optionDisplay + '</option>';
                       }
                    }
                   $dest.removeAttr('disabled')
             .html(options)
             .find('option:first')
             .attr('selected', 'selected');
                 });
                 
               }else if(params.isSelectBox==0){
                
                $.getJSON(url,{str: $$.val() }, function(j){
                    
             $dest.val(j.txtValue);
                 });
               }  
                 
              });
           });
          
       };
       
       
    })(jQuery);
    
    

  • User Attivo

    Ciao,
    mi è parso di capire che j è un array?

    Allora:
    [php]$('#' + ID_dest).val(j*.txtValue);
    [/php]
    Ciao


  • User

    Si ma contiene solo un valore nel caso del cap. Devo mettere l'indice comunque?


  • User

    Funzionaaaaaaaaaaaaaaaaaaaaaaaaaa
    ho messo semplicemente j[0].txtValue!!!

    Ragazzi non so come ringraziarvi!

    Grazie
    Nicola