2016-08-23 6 views
0
var myTimelineVis = { 
    loadData: function(visItems, visContainer, visOptions, visTimelines) { 
     $.getJSON('myURL/' + $(this).val(), function(data) { 
      visItems.clear(); 
      $.each(data, function(i, imp_sched_events) { 
       $.each(imp_sched_events.items.timeline_dataset, function(i, item) { 
        visItems.add(item); 
        if ($(visContainer).is(':empty')) { 
         visTimeline = new vis.Timeline(visContainer, visItems, visOptions); 
        } else { 
         visItems.update(item); 
        } 
        visTimeline.fit(); 
        $('.vis-item-content').foundation(); 
       }); 
      }); 
     }); 
    }, 
    setData: function(selectClass) { 
     var visItems = new vis.DataSet(), 
      visContainer = document.getElementById('visualization'), 
      visOptions = {}, 
      visTimeline = ''; 
     $(selectClass).on('change', function(visItems, visContainer, visOptions, visTimelines) { 
      this.loadData(visItems, visContainer, visOptions, visTimelines); 
     }); 
    } 
} 

$(document).ready(function() { 
     myTimelineVis.setData('select.implementation_schedule'); 
}); 

私は、ページのロード時にタイムラインを作成しようとしていますが、select selectが変更されたときにデータをロードしようとしています。ページが読み込まれると、Chromeコンソール内の両方の選択項目に変更イベントのバインディングが表示されますが、実際の選択変更ではエラーが発生することはありません。彼らは存在しないように行動します。jQuery .onイベントバインディングを変更しても発火させない

これは範囲の問題ですか?

+1

イベントをバインドするとどうなるのでしょうか? 'console.log($(selectClass).length)' – epascarello

+1

イベントハンドラ関数 '.on( 'change')、function(visItems、visContainer、visOptions、 visTimelines){...} 'あなたが思うようにはできません。[on](http://api.jquery.com/on/)でパラメータを渡す方法を確認してください。 – Teemu

+0

'$(selectClass).change();' – Shanimal

答えて

1

jQueryの場合、リスナーはAjax呼び出しではなく、$(document).ready()に追加されます。これは、バニラJavaScriptとは異なる動作をします。

selectが動的に変更された場合は、ハードコードされたセレクタで次の構文を使用する必要があります。セレクタは "#myForm select"のように幅広く使用できます。変数を使う必要はありません。

$(document).on('change', '.selectClass', function(visItems, visContainer, visOptions,  visTimelines) { 
      this.loadData(visItems, visContainer, visOptions, visTimelines); 
     }); 
}); 
+0

コードをさらにリファクタリングしてしまいましたが、この回答が正しい軌道に導いてくれました。ありがとう! – tomster2300

+0

よろしくお願いします! – user1861582

関連する問題