0

我一直在尝试添加 250 毫秒的延迟,以便如果在第一次单击事件的 250 毫秒内多次单击该元素,该函数不会运行两次。帮助!

$(function () {
    $(".layout a").click(function () {
        var rel = $(this).attr('rel'); 
        $.cookie("Layout", $(this).attr('name'), { expires: 365, path: '/media', secure: true });
        $('.content, .searchresults').fadeOut(250, function () {     
           $("link:first").attr("href", rel); window.scrollTo(0, 0); }).delay(150).fadeIn(225); 
        return false;
    });
});
4

3 回答 3

2

为什么不删除单击,然后在完成淡出时重新添加它:

$(".layout a").click(clickHandler);


function clickHandler() {
    var self = $(this)
    self.unbind('click', clickHandler);

    var rel = $(this).attr('rel'); 
    $.cookie("Layout", $(this).attr('name'), { expires: 365, path: '/media', secure: true });
    $('.content, .searchresults').fadeOut(250, function () {     
       $("link:first").attr("href", rel); 
       window.scrollTo(0, 0);
      self.click(clickHandler); }).delay(150).fadeIn(225); 
    return false;
}
于 2013-01-29T22:50:09.677 回答
1

您可以添加一些标记(css 类、自定义属性、数据属性等),以显示当前正在进行的操作。这是如何实现的示例:

$(function () {
    $(".layout a").click(function () {
        var $this = $(this);        
        if ($this.data('inprocess') == true)
            return false;

        $this.data('inprocess', true);
        window.setTimeout(function() { $this.data('inprocess', false); }, 250);


        var rel = $(this).attr('rel'); 
        $.cookie("Layout", $(this).attr('name'), { expires: 365, path: '/media', secure: true });
        $('.content, .searchresults').fadeOut(250, function () {     
           $("link:first").attr("href", rel); window.scrollTo(0, 0); }).delay(150).fadeIn(225); 
        return false;
    });
});
于 2013-01-29T22:46:54.863 回答
0

如果主要问题是阻止点击功能,而一个已经在运行,

更新:感谢@John Koerner 找出我的代码的错误。当我看到并赞成它时,我认为接受的答案是最好的方法。

但这是我更新的答案,

$.fn.onlyOneClick = function () {
    this.one("click", function () {
        var self = $(this);
        alert("clicked");
        $("div").fadeIn(1500, function () {
            $(this).fadeOut(1500, function () {
                self.onlyOneClick();
            });
        });
    });
}
$("span").onlyOneClick();

演示

于 2013-01-29T22:51:11.017 回答