0

我对 jQuery 有一个奇怪的问题。

<a>我有一个函数,它在标签的事件上执行。

link.click(someAction);

在动作中,我修改了另一个 div 元素,在这里我只是设置了一些 CSS 参数并修改了类。

这按预期工作。

现在,我想someAction使用 bool 参数进行扩展。
我想我现在可以按如下方式调用该方法:

link.click(function () {
    someAction(true);
});

不幸的是,这不起作用。我不知道为什么。
该方法被调用,一切都被调用,但 CSS 和类根本没有改变。

然后再次通过调用完全相同的方法link.click(someAction);来工作。

谁能告诉我为什么?


这是一些代码

var openPopover = function( showOverlay ){
    if (typeof showOverlay === "undefined" || showOverlay === null) showOverlay = true;

    if (showOverlay) {
        // Add transparent overlay
        overlay.show();
}

    // Select popover next to the clicked item
    popover = $(this).next("div.popover");
    // It positioned underneath the clicked item, with the spacing above

    // Display the popover
    popover.show();

    // Reset classes
    popover.removeClass("hide-animation");
    popover.addClass("show-animation");

    var animationEnd = function() {         
        $(overlay).off("webkitTransitionEnd");
        $(overlay).off("oTransitionEnd");
        $(overlay).off("transitionend");
    };

    // Add animation did end observer
    $(overlay).on("webkitTransitionEnd", animationEnd);
    $(overlay).on("oTransitionEnd", animationEnd);
    $(overlay).on("transitionend", animationEnd);

    // Run animations
    popover.addClass("shown");
    overlay.addClass("shown");

    // If the browser doesn't support css3 animations, we call it manually
    if (!supportsCSSAnimations) {
        setTimeout(animationEnd, animationDuration);
    }
  };

  selectButton.hover(openPopover); // Opens the popover correctly

  selectButton.hover(function () {
    openPopover(true); // Doesn't work
  });
4

2 回答 2

1

更改后:

this在以下行中,将指向window

popover = $(this).next("div.popover");

而之前,它指向selectButton. 尝试:

selectButton.hover(function () {
  openPopover.call(this, true);
});
于 2013-02-04T09:27:13.743 回答
0

确保在单击链接后阻止默认:

link.click(function (e) {
    e.preventDefault();
    someAction(true);
});
于 2013-02-04T09:25:30.240 回答