4

我已经用尽了我对使用 .one() 来满足我的需求的研究,并让它在每个类选择器实例中正常工作,它只显示一次。但是在 jQuery.com 上,它声明以下内容将起作用,如果单击一次,如果使用相同的类选择器单击另一个元素,它将不会再次运行。但是,这对我不起作用。我在一页上有并且需要相同的特定类选择器。

以下是 jQuery.com 提供的示例代码:

$("#foo").one("click", function() {
alert("This will be displayed only once.");
});
$("body").one("click", ".foo", function() {
alert("This displays once for the first .foo clicked in the body.");
});

上面的第二个似乎不像它所说的那样工作。有谁知道如何真正让它发挥作用。我可以在几个地方拥有 .foo ,但在单击 .foo 之一后,该功能仅显示一次。当另一个 .foo 被点击时,它不会再运行这个函数了吗?非常感谢您的任何帮助/建议。

4

2 回答 2

0

你可以试试这个:

$(function(){
   $(".foo").one("click",function(event) {
      alert("This displays once for the first .foo clicked in the body.");
   });
});

.foo这只会击中alert for one time。如果您再次点击它而不重新加载警报将不会出现。

小提琴:http: //jsbin.com/eluquq/1/edit

于 2012-12-08T12:42:12.267 回答
0

正如此评论中所解释的,这是。当读取正确时(正如dystroy所说,它写得不好),处理程序只会触发一次,用于匹配选择器的第一个元素。

要让每个 元素不超过一次触发.foo,您必须自己执行此操作(请注意,我们已经从 using 切换one()on(),并自己处理速率限制。

$("body").on("click", ".foo", function() {
    var self = $(this);

    if (!self.data('fired')) {
        self.data('fired', true);

        alert("This displays once for each .foo clicked in the body.");
    }
});

http://jsfiddle.net/Zdqpp/1/

于 2012-12-08T12:07:55.597 回答