在jQuery on()事件映射中声明变量?
这里有一个小例子。我想将在jQuery on()事件映射中声明变量?,jquery,variables,Jquery,Variables,这里有一个小例子。我想将t声明为$(this),这样我就可以在单击和鼠标出事件中使用它 $('div a').on({ click: function() { t.find('div').show(); }, mouseout: function() { t.find('div').hide(); } }); 你为什么删除上一篇文章? 有人答对了 t=$('div a'); t.on({ click: function() { t.find('di
t
声明为$(this)
,这样我就可以在单击
和鼠标出
事件中使用它
$('div a').on({
click: function() {
t.find('div').show();
},
mouseout: function() {
t.find('div').hide();
}
});
你为什么删除上一篇文章? 有人答对了
t=$('div a');
t.on({
click: function() {
t.find('div').show();
},
mouseout: function() {
t.find('div').hide();
}
});
或
在一般情况下:不,你不能这样做 使用映射创建多个事件处理程序只是一种快捷方式,最终结果是为每个事件分配单独的函数。当其中一个事件发生并执行相应的函数时,
jQuery将此
设置为触发事件的元素,因此无法提前知道与$('div a')
选择器匹配的元素中的哪一个是正确的
在知道选择器始终只返回一个元素的特殊情况下,可以执行以下操作:
var t = $('div a');
t.on({
click: function() {
t.find('div').show();
},
mouseout: function() {
t.find('div').hide();
}
});
(当然,如果选择器返回多个元素,则这不起作用,因为t
包含所有匹配元素,而不仅仅是事件发生时的当前this
。)
编辑:因为已经很晚了,我觉得自己很傻,这里有一种方法,可以使用你问题中的原始地图,这样t
将是$(这个)
。很明显,考虑到要使其工作所需的所有额外包装,这是荒谬的,但正如我所说的,我觉得很愚蠢-您的映射位于变量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);
}
})();
});
在这两个事件中有单独的作用域,所以不,你不能按你的要求去做
您必须在每个事件中定义t,这可能看起来毫无意义,但如果您要再次使用相同的引用,这仍然是一件好事。(反复使用局部变量比每次使用$更快。)不幸的是,只有在只有一个锚的情况下,这才有效。如果有多个锚点,这将发生故障。您的第二个示例代码段无法工作,您正在对象文本中创建赋值。您的问题是什么?问题是:“有办法吗?”。
$('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);
}
})();
});