2010-08-12 177 views
1

我试图找到一种简单的方法来将点击事件附加到一个元素,这对于第一次和第二次点击事件来说是相当容易的。但是,我试图完成的是三次点击切换。如何为第三次点击分配jQuery点击事件?

1st click = addClas('one'); 2nd click = removeClass('one')。addClass('two'); 3rd click = removeClass('two')。addClass('three'); 下次点击会==第一次点击并再次通过循环..

我使用一个简单的div和通过CSS应用样式,更改元素背景位置 - 所有非常典型和容易..并且是蛋糕做一个切换()或点击()事件..但我无法弄清楚我的生活如何处理第三次点击! :d

这里是我的标记,例如用途:

任何帮助是极大的赞赏!

UPDATE: 我有一些作品..但,恕我直言,它的丑陋和杂乱..还有得是一个更清洁,这样做的更简洁的方式: $(“ tri_switch”)。点击(函数(){VAR this_id = $(本).attr( “ID”);

if($(this).hasClass("one")){     
    $("input#user_"+this_id).attr('checked','checked'); 
    $("input.tri_switch_radio").not("#user_"+this_id).removeAttr('checked'); 
    $(this).removeClass('one').addClass('two'); 
    $("span.tri_switch_checked").text('User'); 
} 
else if ($(this).hasClass("two")){ 
    $("input#admin_"+this_id).attr('checked','checked'); 
    $("input.tri_switch_radio").not("#admin_"+this_id).removeAttr('checked'); 
    $(this).removeClass('two').addClass('three'); 
    $("span.tri_switch_checked").text('Admin'); 

} 
else if ($(this).hasClass("three")){ 
    $("input#readonly_"+this_id).attr('checked','checked'); 
    $("input.tri_switch_radio").not("#readonly_"+this_id).removeAttr('checked'); 
    $(this).removeClass('three').addClass('one'); 
    $("span.tri_switch_checked").text('Readonly'); 

} 

//警报(this_id); });

+0

我甚至想过增加一个计数值,并在第三次点击LOL时重新设置它。只要它的'干净的编码',我对任何使这项工作开放的东西都是开放的:D – revive 2010-08-12 09:31:52

回答

5

Yup @Codler,toggle()可以比默认的两个参数多。只是扔在第三个参数:

$('#element').toggle(function(){ 
    $(this).addClass('one'); 
}, 
function(){ 
    $(this).removeClass('one').addClass('two'); 
}, 
function(){ 
    $(this).removeClass('two').addClass('three'); 
}); 
+0

B E A U T I F U L!我以为我曾经见过一个案例,其中有人用第三个参数切换(),但是在搜索并没有发现任何东西的情况下,我把它写成了条形图回忆LOL 谢谢,这会很好地工作。 – revive 2010-08-12 11:03:07

1
var counter = 0; 
$(".button").bind("click",function(){ 
    counter++; 
    switch(counter){ 
     case 1: 
      doSomething(); 
      break; 
     case 2: 
      doSomething2(); 
      break; 
     case3: 
      doSomething(3); 
      counter=0; 
      break; 
    } 
}) 

是你想要的?

+0

在最后一种情况下..你的意思是'case 3'或'case3',你键入? 另外,在这种情况下..你有doSomething(3); 应该是doSomething3(); ?? 只是想确保我清楚地理解你的例子..我不会错过任何东西。谢谢 – revive 2010-08-12 10:59:44

+0

它是我的错,很抱歉。 情况3和doSomething3()。在任何情况下,你都可以调用一些函数。只需要将计数器重置为最后一种情况即可。 (在这个例子3中) – Anakin 2010-08-13 05:37:42