2013-04-17 86 views
23

我有一個窗體內有幾個選擇。 我申請了選擇2 jQuery插件了這樣的選擇:動態select2沒有發射改變事件

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

的選擇的做工精細,但我有這樣的代碼來自動提交自己的狀態(我對錶單標籤自動提交類)。

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

事情是,用select2,更改或焦點事件根本不會觸發。如果我刪除了select2,那麼這些事件會被完全解僱。

我在做什麼錯?

回答

30

Select2只有2個事件,openchangehttp://select2.github.io/select2/#events),您只能向其中添加偵聽器。 對於<select>元素,您可以使用open事件而不是focus事件。 請不要使用live()方法,因爲它已被棄用。改爲使用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 = ""; 
     }); 
    } 
}); 

這裏是Fiddle

+0

今晚過同樣的問題。這幾乎爲我工作。使用jQuery 1.11.1和select2的文本框版本我不得不使用$('。container')的更長形式。on('change','#myselect2',function(){... – xeo

+0

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

+3

這個小提琴不再出現工作,我看到「Uncaught TypeError:$(...)。 select2不是函數「,儘管select2.js被包含在外部資源中。可能是jsfiddle的一個問題? – jeconner