jquery - setTimeout()和设置参数

标签 jquery settimeout

我有一些如下所示的 jQuery 代码:

$('.mainNav2 > li').mouseleave(function(){
    var someNum = Math.random();
    $(this).attr('id', someNum);
    var t = setTimeout("HideMenu(someNum)", 200);
    $('li.clicked').mouseenter(function() {
        clearTimeout(t);
    });
});

function HideMenu(id) {
    $('#'+id).removeClass('clicked');
}

它的目的是在鼠标离开时隐藏大型菜单,但也通过使用 300 毫秒的 setTimeout 来考虑鼠标意外离开的情况。如果用户在 300 毫秒内将鼠标指针移回到 li 中,则菜单不会隐藏,因为调用了clearTimout(t)。

问题是当用户确实想要鼠标移开时,setTimout 中的函数不会被调用。根据此页面:http://www.w3schools.com/js/js_timing.asp我的语法是正确的,但如果我这样写,我只能从 setTimeout 调用 HideMenu 函数:

var t = setTimeout(HideMenu, 300);

为什么它不能像写的那样工作,我可以将变量作为参数传递到函数中?

最佳答案

虽然标记的正确答案是实现此目的的一种方法......但我不认为这是正确的。

请参阅随附的 JS Fiddle: http://jsfiddle.net/PWHw3/

我们在这里所做的基本上是:

setTimeout(function, timeout, param);

示例:

var test = function(a){
    var b = (a) ? a : "fail";
    alert(b);
};
setTimeout(test, 500, "works");

这对我有用,并且消除了传递两个函数的需要。

关于jquery - setTimeout()和设置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5169020/

相关文章:

javascript - 了解 setTimeout 和clearTimeout 组成的循环函数

javascript - setTimeout 没有被调用(?)

javascript - jQuery 检查复选框是否被选中,然后将值添加到输入字段

javascript - 使用箭头键和智能延迟加载实现有机列表浏览

javascript - Uncaught ReferenceError : RailsAdmin is not defined

jquery - 当数据属性更新时Knockout Js更新ViewModel

javascript - JavaScript 中 window.setTimeout 或 window.setInterval 调用的函数列表?

javascript - 为什么我需要一个包装函数来递归调用 setTimeout

javascript - 在 JavaScript 中交换两个变量的值

javascript - 使用 javascript onclick 调用时,未检测到使用 Jquery addClass 添加到元素的类名