功能有时需要双击才能工作

时间:2013-08-27 17:21:13

标签: jquery html css

我有3个功能与下面的功能相同。 ShowAction2(),ShowAction3()和ShowAction4()。每个函数负责显示DIV,隐藏其他DIV以及添加和删除类。

然后删除showAction()函数并添加一个新函数gogo()。如果第二次调用该函数,则会反转整个过程。

  $("#clickDiv").click(function showAction(){
     $("#infDivOne").show();
     $("#infDivTwo, #infDivThree, #infDivFour").hide();
     $(".goActive2, .goActive3, .goActive4").removeClass('glow');
     $("#clickDiv2, #clickDiv3, #clickDiv4").removeClass('rotated');
     $("#clickDiv").addClass('rotated');
     $(".goActive").addClass('glow');
     $("#clickDiv").off('click');

     $("#clickDiv").on('click', function gogo(){
        $("#infDivOne").hide();
        $(".goActive").removeClass('glow');
        $("#clickDiv").removeClass('rotated');
        $("#clickDiv").off('click');
        $("#clickDiv").on('click',showAction);
    });
  });

我确信有更好的方法可以达到类似的效果,但现在,这是有效的。唯一的问题是,有时我必须双击要调用的函数的按钮。

我最终将取代整个功能,但有人可能会指出为什么有时需要双击并且其他时间单击一次?

(我提前向任何试图通读这种乱码的人道歉。)

4 个答案:

答案 0 :(得分:3)

为什么不在$(“#clickDiv”)上设置属性来管理实际步骤?

$("#clickDiv").on("click",function showAction(){
    var _step = $(this).attr("step");
    switch(_step){
         case 1:
         case 2:
    }
});

好运。

答案 1 :(得分:0)

在点击元素上添加一个类,告诉发生了哪个动作,然后根据当前的类做了一件事。

 $("#clickDiv").click(function showAction(){
     var $this = $(this);
    if($this.hasClass("secondClick"))
    {
        showAction(this);
        $this.removeClass("secondClick");
    }
    else if($this.hasClass("firstClick"))
    {
        $("#infDivOne").hide();
        $(".goActive").removeClass('glow');
        $("#clickDiv").removeClass('rotated');
        $this.removeClass("firstClick").addClass("secondClick");
    }
    else{
       $this.addClass("firstClick");
       $("#infDivOne").show();
       $("#infDivTwo, #infDivThree, #infDivFour").hide();
       $(".goActive2, .goActive3, .goActive4").removeClass('glow');
       $("#clickDiv2, #clickDiv3, #clickDiv4").removeClass('rotated');
       $("#clickDiv").addClass('rotated');
       $(".goActive").addClass('glow');
    }

  });

答案 2 :(得分:0)

这个怎么样?

$("#clickDiv").click(function() {
    if($("infDivOne").is(":visible")) {
        // This div is visible, so toggle the effects off
    }
    else {
        // This div isn't visible, so toggle the effects on
    }
});

答案 3 :(得分:0)

简单地设置它们并切换它们似乎是一种更简单的方法。我可能有初始状态/类反转,但这应该切换东西。

$("#infDivOne").hide();
$("#infDivTwo, #infDivThree, #infDivFour").show();
$(".goActive2, .goActive3, .goActive4").addClass('glow');
$("#clickDiv2, #clickDiv3, #clickDiv4").addClass('rotated');

$("#clickDiv").click(function () {
    $("#infDivOne, #infDivTwo, #infDivThree, #infDivFour").toggle();
    $(".goActive, .goActive2, .goActive3, .goActive4").toggleClass('glow');
    $("#clickDiv, #clickDiv2, #clickDiv3, #clickDiv4").toggleClass('rotated');
});

现在如果你想让所有人都切换,只需这样做:

$("#clickDiv, #clickDiv2, #clickDiv3, #clickDiv4").click(function () {
    $("#infDivOne, #infDivTwo, #infDivThree, #infDivFour").toggle();
    $(".goActive, .goActive2, .goActive3, .goActive4").toggleClass('glow');
    $("#clickDiv, #clickDiv2, #clickDiv3, #clickDiv4").toggleClass('rotated');
    $("#clickDiv").toggleClass('rotated');
    $(".goActive").toggleClass('glow');
});

编辑:鉴于您的所有评论,我相信这对课程来说更容易完成:

标记:

<div id="clickDiv1" class="clickDiv">One click</div>
<div id="clickDiv2" class="clickDiv">Two click</div>
<div id="clickDiv3" class="clickDiv">Three click</div>
<div id="clickDiv4" class="clickDiv">Four click</div>
<div id="infDivOne" class="InfoDiv">Info 1</div>
<div id="infDivTwo" class="InfoDiv">Info 2</div>
<div id="infDivThree" class="InfoDiv">Info 3</div>
<div id="infDivFour" class="InfoDiv">Info 4</div>
<div id="goActive">ACTIVE: <span class="goActive">One</span>
 <span class="goActive">Two</span>
 <span class="goActive">Three</span>
 <span class="goActive">Four</span>
</div>

代码:

// event handler
$(".clickDiv").click(function () {
    var index = $(this).index();
    $('.InfoDiv').hide().eq(index).show();
    $('.goActive').removeClass('glow').eq(index).addClass('glow');
    $('.clickDiv').removeClass('rotated').eq(index).addClass('rotated');
});
// setup first one as active
$(".clickDiv").eq(0).trigger('click');

小提琴显示在行动中:http://jsfiddle.net/MMerB/