Метод JQuery.on() с несколькими обработчиками событий для одного селектора
Попытка выяснить, как использовать метод JQuery.on() с определенным селектором, который имеет несколько связанных с ним событий. Ранее я использовал метод .live(), но не совсем уверен, как выполнить тот же подвиг с .on(). См. Мой код ниже:
$("table.planning_grid td").live({
mouseenter:function(){
$(this).parent("tr").find("a.delete").show();
},
mouseleave:function(){
$(this).parent("tr").find("a.delete").hide();
},
click:function(){
//do something else.
}
});
Я знаю, что я могу назначить несколько событий, вызвав:
$("table.planning_grid td").on({
mouseenter:function(){ //see above
},
mouseleave:function(){ //see above
}
click:function(){ //etc
}
});
Но я считаю, что правильное использование .on() будет таким:
$("table.planning_grid").on('mouseenter','td',function(){});
Есть ли способ сделать это? Или что здесь лучше всего? Я попробовал код ниже, но не кубик.
$("table.planning_grid").on('td',{
mouseenter: function(){ /* event1 */ },
mouseleave: function(){ /* event2 */ },
click: function(){ /* event3 */ }
});
Спасибо заранее!
Ответы
Ответ 1
Это наоборот. Вы должны написать:
$("table.planning_grid").on({
mouseenter: function() {
// Handle mouseenter...
},
mouseleave: function() {
// Handle mouseleave...
},
click: function() {
// Handle click...
}
}, "td");
Ответ 2
Кроме того, если у вас было несколько обработчиков событий, прикрепленных к тому же селектору, выполняющему ту же функцию, вы можете использовать
$('table.planning_grid').on('mouseenter mouseleave', function() {
//JS Code
});
Ответ 3
Я узнал что-то действительно полезное и фундаментальное из здесь.
Функции chaining очень полезны в этом случае, которые работают с большинством функций jQuery, включая вывод функции on.
Это работает, потому что вывод большинства функций jQuery - это набор входных объектов, поэтому вы можете сразу их использовать и сделать его короче и умнее
function showPhotos() {
$(this).find("span").slideToggle();
}
$(".photos")
.on("mouseenter", "li", showPhotos)
.on("mouseleave", "li", showPhotos);
Ответ 4
И вы можете комбинировать те же события/функции таким образом:
$("table.planning_grid").on({
mouseenter: function() {
// Handle mouseenter...
},
mouseleave: function() {
// Handle mouseleave...
},
'click blur paste' : function() {
// Handle click...
}
}, "input");
Ответ 5
Если вы хотите использовать одну и ту же функцию в разных событиях, можно использовать следующий блок кода
$('input').on('keyup blur focus', function () {
//function block
})
Ответ 6
Попробуйте использовать следующий код:
$("textarea[id^='options_'],input[id^='options_']").on('keyup onmouseout keydown keypress blur change',
function() {
}
);