В общем случае: нет, вы не можете этого сделать.
Использование карты для создания нескольких обработчиков событий - это просто ярлык, конечный результат - отдельные функции, назначенные каждому событию.Когда происходит одно из событий и выполняется соответствующая функция, jQuery устанавливает this
в качестве элемента, для которого было инициировано событие, поэтому невозможно заранее узнать, какой из элементов соответствует селектору $('div a')
.является правильным.
В особом случае, когда вы знаете, что ваш селектор всегда вернет ровно один элемент, вы можете сделать это:
var t = $('div a');
t.on({
click: function() {
t.find('div').show();
},
mouseout: function() {
t.find('div').hide();
}
});
(Конечноэто не работает, если селектор возвращает несколько элементов, потому что тогда t
содержит все соответствующие элементы, а не только текущий this
на момент события.)
РЕДАКТИРОВАТЬ: потому что поздно ночьюи я чувствую себя глупо, вот способ, которым оригинальная карта из вашего вопроса может быть использована таким образом, что t
будет $(this)
.Понятно, что это нелепо, учитывая всю дополнительную упаковку, необходимую для его работы, но, как я уже сказал, я чувствую себя глупо - ваша карта находится в переменной m
:
$('div a').on("click mouseout", (function() {
var t,
m = {
click: function() {
t.find('div').show();
},
mouseout: function() {
t.find('div').hide();
}
};
return function(e) {
if (e.type in m){
t = $(this);
return m[e.type].call(this, e);
}
})();
});