7

我需要我的脚本在第一次单击元素时执行某些操作,并在单击 2、3、4 时继续执行不同的操作,依此类推

$('selector').click(function() {  
//I would realy like this variable to be updated  
var click = 0;  
    if (click === 0) {  
        do this  
        var click = 1;  
    } else {  
        do this  
    }
});//end click

真的我认为它应该依赖于变量,但我想不出如何从这里更新变量,任何帮助都会很棒。

4

6 回答 6

11

看看jQuery的.data()方法。考虑你的例子:

$('selector').click(function() {
    var $this = $(this),
        clickNum = $this.data('clickNum');

    if (!clickNum) clickNum = 1;

    alert(clickNum);

    $this.data('clickNum', ++clickNum);
});

在这里查看一个工作示例:http: //jsfiddle.net/uaaft/

于 2011-01-14T05:26:39.613 回答
9

使用数据将您的状态与元素保持一致。

在您的点击处理程序中,

采用

$(this).data('number_of_clicks')

检索值和

$(this).data('number_of_clicks',some_value)

设置它。

注意: $(this).data('number_of_clicks') 如果尚未设置,将返回 false

编辑:固定链接

于 2011-01-14T05:24:43.720 回答
1

另一种选择可能是有两个函数,并使用one函数$(document).ready()(或绑定处理程序的任何位置)绑定一个,并在该函数中,绑定第二个函数以使用bindor为所有后续点击运行click

例如

function FirstTime(element) {
   // do stuff the first time round here
   $(element.target).click(AllOtherTimes);
}

function AllOtherTimes(element) {
   // do stuff all subsequent times here
}

$(function() {
    $('selector').one('click', FirstTime);
});
于 2011-01-14T05:54:28.883 回答
1

这在香草 Js 中非常容易。这是使用正确的不同点击处理程序

const onNextTimes = function(e) {
    // Do this after all but first click
};

node.addEventListener("click", function onFirstTime(e) {
    node.addEventListener("click", onNextTimes);
}, {once : true});

文档,可以使用

于 2017-09-19T04:08:37.107 回答
0

如果您只需要一系列固定行为,您可以这样做:

$('selector').toggle(function(){...}, function(){...}, function(){...},...);

切换方法中的事件处理程序将被有序调用。

于 2011-01-14T05:37:55.090 回答
0

$('#foo').one('click', function() { alert('这只会显示一次。'); });

这会将单击事件绑定到相应的 Html 元素一次,并在第一次事件呈现后自动取消绑定。

或者,您可以执行以下操作:

$("#foo").bind('click',function(){

// 一些活动

$("#foo").unbind("点击"); // 将其绑定到其他事件处理程序。

});

于 2011-01-14T06:40:27.773 回答