Javascript 在select2输入搜索元素添加自定义事件

Javascript 在select2输入搜索元素添加自定义事件,javascript,jquery,jquery-select2,Javascript,Jquery,Jquery Select2,我试图将DOM中的select2元素作为目标,并将keyup事件附加到其输入字段。因为元素是隐藏的,并且是在按下选择后创建的,所以我无法为输入设置任何id或类名。我使用以下代码使其与事件委派一起工作: $('body').on('keyup', '.select2-search__field', function() { //TODO: do some work here }); 这很好,但是它适用于我在页面上的所有select2元素。我想针对特定的select2元素。我还尝试获取输

我试图将DOM中的select2元素作为目标,并将keyup事件附加到其输入字段。因为元素是隐藏的,并且是在按下选择后创建的,所以我无法为输入设置任何id或类名。我使用以下代码使其与事件委派一起工作:

$('body').on('keyup', '.select2-search__field', function() {
    //TODO: do some work here
}); 
这很好,但是它适用于我在页面上的所有select2元素。我想针对特定的select2元素。我还尝试获取输入的父元素,以便检查当前使用的是哪个select2元素,但这是不可能的,因为select2直接在主体上而不是在选择元素上创建元素。因此,所有select2元素的父元素都具有相同的类,因此无法区分

我使用的是select2的4.0.4版本,目前为止我阅读的文档中没有将自定义事件附加到输入的选项。

您可以使用
index()
。select2容器--打开
类来查找该项

$(文档).ready(函数(){
$('select')。select2();
})
$('body')。在('keyup','上。选择2-search\u字段',function(){
var selectItem=$('.select2容器--open').prev();
var index=selectItem.index();
var id=selectItem.attr('id');
警报('项目索引='+索引+'和id='+id);
});

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
111111111111
222222222222
333333333333
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依

您可以在选择器中使用
:eq

等式(1)因为需要第二个,索引从0开始

$('body').on('keyup', '.select2-search__field:eq(1)', function() {
    //TODO: do some work here
});
运行代码段并更改选择字段的值

$(文档)。打开(“更改”,选择2-search\u字段:eq(1)”,函数(){
警报(“你好,世界!”);
})

A1
A2
A3
地下一层
地下二层
地下三层
C1
C2
C3

您可以找到由
$(“.select2 container--open”).prev()单击的
select
并检查它是否具有您添加的特定
数据属性
,以确定是否执行这些操作

$(文档).ready(函数(){
$('.my select').select2();
});
$('body')。在('keyup','上。选择2-search\u字段',function(){
让$select=$(“.select2容器--打开”).prev();
如果($select.data(“show”)){
//托多:在这里做些工作
console.log(this.value)
}
});
选择{
宽度:100px;
}

选择1
选择2
选择3
选择4

您可以使用
index()
来识别元素。我的答案和您的答案有什么区别?两者几乎相同。但是使用
index
是不可靠的,使用
id
在我看来是一个不好的代码。我认为使用
class
data-*
会是一个更好的选择。谢谢,现在我可以获得选择id了!