【问题标题】:Click event fired twice点击事件触发两次
【发布时间】:2010-10-01 13:49:47
【问题描述】:

我不知道这是否与 Raphael、ColorBox 或 jQuery 有关。这是我的相关代码:

var image = paper.image(p.url_, tx, ty, img.width, img.height);
image[0].style.cursor = "pointer";
image.node.onclick = function() {
    $.colorbox({
        title: "Some Random Title",
        href: function() {
            $.post("test.php", { arg: p.id_ } );
        }
    });
};      

在 FireBug 控制台中观看点击时,帖子会被触发两次。如果它也是一个 get,它也会被触发两次。

如果我从 href 函数更改为直接调用 test.php,那么只会发出一个 get。

为什么使用jQuery时点击事件会发出两次调用?

更新:在匿名函数中添加对警报的调用也会触发两次,所以我猜这与颜色框有关。

更新 2:刚刚尝试将其连接到实际页面,FireBug 除了两个 get/posts 之外还吐出此错误消息。这证实了这是 ColorBox 中的一个问题。此外,它也很难取得进展,因为当两个调用都显示完整的颜色框时,它会显示它的 throbber。

c is undefined 
    (function(b,gb){var v="none",t="click"...c.settings=eb;b(c.init)})(jQuery,this)

注意:这仅附加到第二次调用,而不是第一次调用。

【问题讨论】:

  • 你试过“图像[0].node.onclick = function() {};” ??
  • 我没有,但我刚刚做了,FireBug 报告了image[0].node is undefined

标签: jquery colorbox raphael


【解决方案1】:

对彩盒不是很熟悉,所以我在这里勉为其难。我猜你希望 colorbox 的 html 使用帖子的结果。我会把帖子放在彩盒外面。你有什么理由不使用$(image.node).click()?甚至$(image).click()?这是我的做法

var image = paper.image(p.url_, tx, ty, img.width, img.height);
image[0].style.cursor = "pointer";
$(image.node).click(function() {
    var post_html = $.post("test.php", { arg: p.id_ } );
    $.colorbox({
        title: "Some Random Title",
        html: post_html
    });
});

这可能无法解决问题,但它会告诉您问题是颜色框触发了两次 href 还是单击执行了两次。

【讨论】:

  • 使用image.node.click 的原因是因为它是由Raphael 提供的,目的是使元素可点击,并且似乎是合乎逻辑的方式。我会尝试你的方法并报告。
  • 实际上你已经快到了。我已经更正了你的例子,并给你打勾。然而,使用这种方法时,灯箱的点击和外观之间存在明显的延迟,而且由于加载是在灯箱外完成的,您不再会得到 throbber。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多