2013-04-17 16 views
23

私は内部にいくつかの選択肢があるフォームを持っています。 私はこのようなものを選択する上でSELECT2のjQueryプラグインを適用しています:動的select2は変更イベントを起動しません

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

の選択作業罰金を、私は自分のフォームをのautoSubmitするには、このコードを持っている(私は、formタグののautoSubmitクラスを持っています)。

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)しかありません。これらのイベントにのみリスナを追加できます。 要素にfocusの代わりにopenイベントを使用できます。 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')を使用しなければなりませんでした( 'change'、 '#myselect2'、function(){... – xeo

+0

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

+3

このフィドルはもはや機能しないようです。「Uncaught TypeError:$(...)」と表示されています。 select2.jsが外部リソースに含まれているにもかかわらず、select2はコンソールの関数ではありません。おそらくjsfiddleに問題がありますか? – jeconner

関連する問題