一个mouseleave事件将$(this)记录为元素;另一个将其作为委托对象进行日志记录
One mouseleave event logs $(this) as element; another logs it as delegated object
我已将mouseleave事件附加到两个HTML元素。我很困惑为什么在一个将$(this)
打印到控制台的过程中显示事件所附加的div
元素,而另一个打印出整个window
。
$(function () {
$(document).on({
mouseenter: function (evt) {
$(evt.target).data('hovering', true);
},
mouseleave: function (evt) {
$(evt.target).data('hovering', false);
}
}, "*");
$.expr[":"].hovering = function (elem) {
return $(elem).data('hovering') ? true : false;
};
$(document).on({
mouseenter: function () {
var $menu = $(".menu[data-a='" + $(this).attr("data-a") + "']");
//console.log($menu)
$menu.addClass("menu_vis");
$(".menu").hide();
$menu.show();
},
mouseleave: function () {
console.log($(this)) //the div
var s = setTimeout(function () {
var $menu = $(".menu[data-a='" + $(this).attr("data-a") + "']");
var over_menu = $menu.is(":hovering");
if (!over_menu) {
$menu.hide();
}
}, 100);
}
}, ".activate");
$(document).on({
mouseleave: function () {
var s = setTimeout(function(){
var $activate = $(".activate[data-a='" + $(this).attr("data-a") + "']");
var over_activate = $activate.is(":hovering");
console.log($(this)); //the window ??
if (!over_activate){
$(this).hide();
}
}, 100)
}
}, ".menu");
});
在嵌套函数中,this
关键字指的是window
。(您使用的是setTimeout,即嵌套在mouseleave中)
要解决:在使用嵌套函数之前使用变量
var that = $(this);
//now when you use function, use like this:
setTimeout(function(){
console.log(that);//logs the Div
},100)
或者使用绑定方法:
setTimeout(function(){
console.log($(this));//logs the Div
}.bind(this),100)
相关文章:
- 如何在javascript中记录对象时强制使用toString
- 循环浏览JavaScript对象并记录其属性
- 在对象数组中添加具有相同名称的产品记录的价格
- 如何使用Immutable.js从javascript原始对象创建记录映射
- 什么是声明性环境记录,它与激活对象有何不同
- 错误:'历史记录.适配器'为null或不是对象
- 日志记录功能/对象名称's在函数堆栈内的javascript中
- 如何读取mysql表记录并存储在javascript对象中
- 使用单引号(撇号)转义将活动记录对象解析为 json
- JSDoc:如何记录父“类”的“选项”对象文字
- 如何从 javascript 对象中删除记录
- 在新的 Array Javascript 中对对象中的部分重复对象进行计数和记录
- 控制台.用box2d记录对象速度
- JavaScript获取浏览器特定的历史记录对象
- 为什么在控制台上记录对象引用时会显示一个整数
- 记录对象状态以进行序列化
- 如何记录对象属性
- 如何在JSDOC中记录对象数组
- Javascript将图像存储在数组中的对象中,在console.log()中,但在记录对象时
- 如何在不调用对象的toString()方法的情况下记录对象