使用jQuery .one的逻辑

时间:2013-04-11 13:56:32

标签: javascript optimization jquery

使用jQuery的.one事件处理程序在第一次点击时进行设置,在下一次/后续点击时进行其他操作,是否可以更优雅地编写:

$('#start').one('click', function(){
    alert('one');

    // could also be .on for subsequent clicks
    $(this).one('click', function(){
        alert('two');    
    });

});

Example fiddle

更新:我希望有一个使用.one的jQuery模式 像这样self-defining function, 但是阅读the source for .one()它只是.on()

的扩展

3 个答案:

答案 0 :(得分:1)

var clickIndex = 0;
$('#start').on('click', function(){
    alert(++clickIndex);
});

您可以在此处放置switch语句或if块,以根据用户点击的次数运行不同的代码。如果.one侦听器取消绑定对您而言很重要,只需在.off表示您已完成绑定时使用clickIndex

答案 1 :(得分:0)

我认为在这种情况下你可以使用数据属性或类并使用click事件:

$('#start').on('click', function(){
    if (!$(this).data('clicked')) {
      alert('one');
      $(this).data('clicked', 'true');
    }
    else  {
      alert('more than one');
    }
});

或与班级:

$('#start').on('click', function(){
    if (!$(this).hasClass('clicked')) {
      alert('one');
      $(this).addClass('clicked');
    }
    else  {
      alert('more than one');
    }
});

答案 2 :(得分:0)

也许是这样的:

$('#start').on('click', function(){
    var click = $(this).data('clicked')?$(this).data('clicked'):1;
    alert(click);
    if(click === 2)
        $(this).off('click')
    else $(this).data('clicked',++click);    
});