0

最初のクリック イベントの 250 ミリ秒以内に要素が複数回クリックされた場合に関数が 2 回実行されないように、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 に答える