0

我将一些稍微复杂的功能绑定到点击事件

$(someSelector)).bind('click', someFunction(a,b,c));

function somefunction(a,b,c) {
    return function() {
        // some logic
        $(anotherSelector).each(function() {
            // fade out with call back...
            $(this).fadeOut("fast", function() {
                // TODO: add callback here???
                $(contentSelector).fadeIn("fast");
            })
        })

    }
}

问题是一系列快速点击导致不一致的淡出/淡入行为。我假设在当前的淡入完成之前处理了新的点击事件。

我想我正在寻找一些回调机制,以确保在当前点击完成后处理新的点击。我可以在fadeIn中添加一个回调,但我看不出我的逻辑对我有什么帮助......

只要处理了单击(然后重新绑定它们),我还阅读了有关取消绑定组件的信息,但同样 - 我不确定我会将其放在哪个逻辑之上。

谢谢你的建议 :)

4

1 回答 1

1

您可以使用 jQuery 的.on.off方法:

$someElement = $(someSelector)
$someElement.on('click', someFunction(a, b, c));

function someFunction(a, b, c) {
  // detach the event handler
  $someElement.off('click', someFunction);

  /* useful stuff here */

  // reattach the event handler
  $someElement.on('click', someFunction(a, b, c));
}

我在哪里缓存了 jQuery 元素

或者,您可以在回调范围之外创建一个变量,在回调中检查并设置它的值:

$(someSelector)).bind('click', someFunction(a,b,c));

var isWaiting = false;
function somefunction(a,b,c) {
  if (!isWaiting) {
    isWaiting = true;

    /* useful stuff here */

    isWaiting = false;
  }
}

我会推荐.on/.off方法,因为它更直接地处理 jQuery 事件绑定过程。

于 2012-04-09T07:35:23.110 回答