2013-04-17 16 views
23

Ho un modulo con un paio di selezioni all'interno. sto applicando il plugin jQuery select2 su quelle seleziona come questo:Evento di modifica evento di selezione select2 dinamico

$("select.company_select, select.positions_select").select2(); 

del select bel lavoro, ma devo questo codice per autosubmit mia forma (ho la classe autosubmit sul tag form).

var currentData; 
    $('.autosubmit input, .autosubmit select, .autosubmit textarea').live('focus', function() { 
     currentData = $(this).val(); 
    }); 

    $('.autosubmit input, .autosubmit select, .autosubmit textarea').live('change', function() { 
     console.log('autosubmiting...'); 
     var $this = $(this); 
     if (!currentData || currentData != $this.val()) { 
      $($this.get(0).form).ajaxSubmit(function (response, status, xhr, $form) { 
       currentData = ""; 
      }); 
     } 
    }); 

Il fatto è che con select2, il cambiamento o l'evento di messa a fuoco non viene eseguito affatto. Se rimuovo select2, gli eventi vengono sparati perfettamente.

Cosa sto sbagliando?

risposta

30

Select2 ha solo 2 eventi, open e change (http://select2.github.io/select2/#events), è possibile aggiungere solo gli ascoltatori a loro. È possibile utilizzare l'evento open anziché focus per l'elemento <select>. E per favore non usare il metodo live(), poiché è deprecato. Utilizzare invece on().

var currentData; 
$(".autosubmit select").on("open", function() { 
    currentData = $(this).val(); 
}); 
$(".autosubmit input").on("focus", function() { 
    currentData = $(this).val(); 
}); 
$(".autosubmit input, .autosubmit select").on("change", function() { 
    var $this = $(this); 
    console.log('autosubmitting'); 
    if (!currentData || currentData != $this.val()) { 
     $($this.get(0).form).ajaxSubmit(function (response, status, xhr, $form) { 
      currentData = ""; 
     }); 
    } 
}); 

Ecco il Fiddle

+0

avuto lo stesso problema di stasera. questo ha funzionato quasi per me. usando jQuery 1.11.1 e una versione di casella di testo di select2 ho dovuto usare la forma più lunga di $ ('. container'). on ('change', '# myselect2', function() {... – xeo

+0

Documenti [http : //select2.github.io/select2/] (http://select2.github.io/select2/) –

+3

Questo violino sembra non funzionare più. Vedo "Uncaught TypeError: $ (...). select2 non è una funzione "nella console nonostante select2.js sia incluso nelle risorse esterne. Forse un problema con jsfiddle? – jeconner

Problemi correlati