Javascript jQuery对多个事件使用相同的函数,每个事件针对不同的元素?
我想完成正在做的事情,除了一个转折: 我希望每个事件针对不同的元素 用例是一个选择框,如果没有选择第一个“choose your option”(选择您的选项)选项,它将触发一个事件Javascript jQuery对多个事件使用相同的函数,每个事件针对不同的元素?,javascript,jquery,events,Javascript,Jquery,Events,我想完成正在做的事情,除了一个转折: 我希望每个事件针对不同的元素 用例是一个选择框,如果没有选择第一个“choose your option”(选择您的选项)选项,它将触发一个事件 $(document).on('change', 'select:nth-child(1)', function(e) ){ do_stuff(); }); $(document).on('click', 'select:not(:first-child)', function(e) ){
$(document).on('change', 'select:nth-child(1)', function(e) ){
do_stuff();
});
$(document).on('click', 'select:not(:first-child)', function(e) ){
do_stuff();
});
是否有一种组合的、更干净的方法来实现这一点,而不必创建do_stuff()
如何在不触发两次事件的情况下执行此操作?测试函数中的位置
$(document).on("change click", "select option", function(e) {
if ($(this).index() == 0) {
// do stuff for first child
} else {
// do stuff for other children
});
但是,我不认为
change
事件是在
元素上触发的,它只是在
本身上触发的。因此,您的基本前提似乎是错误的,因为change
事件永远不会在select:nth child(1)
上触发。您有一个答案,但也可以使用以下组合:
注意:选项卡指向页面上的元素以触发focusin
事件
$('#selectcontainer').on('change focusin manual', ".myselectthing", function(e) {
var selectionIndex = $(this).prop('selectedIndex');
$('#results').text("this type " + e.type + ":" + $(this).val() + " : " + selectionIndex);
});
$('#selectcontainer').find('.myselectthing').val("ralf").trigger("manual");
一些示例标记:
<div id="results">
empty
</div>
<div id="selectcontainer">
<select class="myselectthing">
<option value="me">choose me</option>
<option value="ralf">choose ralf</option>
<option value="charlie">choose charlie</option>
</select>
</div>
空的
选择我
选择拉尔夫
选择查理
玩它:检查处理程序中的目标。在那里第一个事件的目的是什么?似乎除了第一个事件外,第二个事件将触发所有事件…@oMiKeY在我的代码中,我有一个触发下拉选择更改的样例。但如果选择了第一个选项,我不希望它做任何事情。“更改”事件中也存在代码。该部分依赖于我希望可用的状态变量。我找不到“手动”事件的文档。它是什么?
focusin
使其在单击选择框时触发,而不是在选择选项时触发。当您使用tab键“聚焦”选择时,focusin也会触发。“手动”是我创建的自定义事件,在我手动更改值时触发-请参见最后一行。为什么要触发自定义事件,为什么不使用触发器(“更改”)
?一件事是,更改的不是选项。选择
会改变。因此,我想这意味着在内部,我们必须执行类似于$(this).find(“>:first child”).index()
的操作。