2013-04-17 13 views
23

Mam formularz z kilkoma wyborami w środku. mam zastosowaniu wtyczki select2 jquery nad tymi wybiera takich jak ten:Dynamic select2 nie wyzwala zmiany zdarzenia

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

select pracują dobrze, ale mam ten kod do AutoWyślij moją postać (mam klasę AutoWyślij na tagu formularza).

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 = ""; 
      }); 
     } 
    }); 

Chodzi o to, że przy wyborze2 zmiana lub fokus nie jest w ogóle uruchamiany. Jeśli usunę zaznaczenie2, zdarzenia zostaną odpalone idealnie.

Co robię źle?

Odpowiedz

30

Select2 ma tylko 2 zdarzenia, open i change (http://select2.github.io/select2/#events), można dodać tylko słuchaczy do nich. Możesz użyć zdarzenia open zamiast elementu focus dla elementu <select>. Proszę nie używać metody live(), ponieważ jest przestarzała. Zamiast tego użyj 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 = ""; 
     }); 
    } 
}); 

Oto Fiddle

+0

miał ten sam dzisiaj problem. to prawie dla mnie zadziałało. używając jQuery 1.11.1 i wersji tekstowej select2 musiałem użyć dłuższej formy $ (". container"). on ('change', '# myselect2', function() {... – xeo

+0

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

+3

To skrzypce już nie działa. Widzę "Uncaught TypeError: $ (...). select2 nie jest funkcją "w konsoli pomimo wyboru select2.js w zewnętrznych zasobach. Prawdopodobnie problem z jsfiddle? – jeconner

Powiązane problemy