我无法成功侦听使用 d3 创建的 select2 列表中的更改.js
list = d3.select('.root').append('input').attr('type', 'hidden');
$(list).select2({
placeholder: "Default",
data: { results: data, text: 'text' },
matcher: function(term, text, datum) {
return text.toUpperCase().indexOf(term.toUpperCase())>=0 || datum.type.indexOf(term.toLowerCase())>=0;
}
});
这成功地创建了 select2 列表,我能够选择值。
但是,我无法将函数绑定到更改事件,我相信我应该能够像这样:
list.on('change', function(){
console.log('Selected: ' + $(this).val());
});
我是否可以执行此操作,或者是否需要为输入元素显式使用选择器?
$('.root > input').on('change', function(){
console.log('Selected: ' + $(this).val());
});
在此处查看(非)工作小提琴:)
http://jsfiddle.net/LbLjc/1/
尝试在此处使用事件委托,因为您的input
元素已动态添加到 DOM 中:
$('body').on('change', '.root > input', function(){
console.log('Selected: ' + $(this).val());
});
由于您的 ellements 是动态创建的,因此您应该为此使用事件委托
$('.root').on('change',"input", function(){
console.log('Selected: ' + $(this).val());
});
执行此操作的正确
方法是遍历 d3 对象中的项,并将处理程序附加到所有项:
list.forEach(function(elem) {
$(elem).on('change', log)
});
工作小提琴:http://jsfiddle.net/LbLjc/3/
如果您确信只想要第一个,则可以将其缩短为:
$(list[0]).on('change', log);