Jquery - 如何区分具有相同类的多个按钮

时间:2013-02-26 08:18:34

标签: jquery html css

我正在建立一个带有设置按钮的盒子的网站,该按钮会触发盒子上的向下滑动效果。

按钮和向下滑动框必须由每个类生成,而不是id(就像现在一样),以使我的代码更简单,更短。

最终它将是几个按钮(btn1,btn 2,btn3等)和盒子(box1,box2,box3等),所以为了缩短我的jQuery代码,我想要一个单独触发每个按钮的整体代码,而不是同时触发它们。它需要由一个类触发,因为我正在计划一些php,用户可以在其中添加一个小部件。

以下是我的示例:http://www.danieldoktor.dk/test/test.html

我的代码是:

HTML

<div class="lists">
        <header class="box_header" id="box1">
            <h1>HEADER 1</h1>
            <div class="setting" id="btn1"></div>
            </header>
 </div>

 <div class="lists">
        <header class="box_header" id="box2">
            <h1>HEADER 2</h1>
            <div class="setting" id="btn2"></div>
            </header>
 </div>

的jQuery

// widget 1

  $("#btn1").click(function () { 
    if(!$("#box1").hasClass('header-down')){
        $("#box1").stop().animate({height:'100px'},{queue:false, duration:600, easing: 'linear'}).addClass('header-down'); 
    }
    else{
        $("#box1").stop().animate({height:'30px'},{queue:false, duration:600, easing: 'linear'}).removeClass('header-down');
    }

}); 


$(document).click(function() {
    if($("#box1").hasClass('header-down')){
        $("#box1").stop().animate({height:'30px'},{queue:false, duration:600, easing: 'linear'}).removeClass('header-down');
}
});

$("#box1").click(function(e) {
    e.stopPropagation(); // This is the preferred method.
           // This should not be used unless you do not want
                         // any click events registering inside the div
});



 // widget 2

  $("#btn2").click(function () { 
    if(!$("#box2").hasClass('header-down')){
        $("#box2").stop().animate({height:'100px'},{queue:false, duration:600, easing: 'linear'}).addClass('header-down'); 
    }
    else{
        $("#box2").stop().animate({height:'30px'},{queue:false, duration:600, easing: 'linear'}).removeClass('header-down');
    }

}); 


$(document).click(function() {
    if($("#box2").hasClass('header-down')){
        $("#box2").stop().animate({height:'30px'},{queue:false, duration:600, easing: 'linear'}).removeClass('header-down');
}
});

$("#box2").click(function(e) {
    e.stopPropagation(); // This is the preferred method.
           // This should not be used unless you do not want
                         // any click events registering inside the div
});

你将如何使用类而不是id来构建整体脚本,并仍然将每个类控制为唯一的ID? 看到这个解释我想要的psydo类:

// widget overall

      $(".someBtnClass").click(function () { 
        if(!$(".someBoxClass").hasClass('header-down')){
            $(".someBoxClass").stop().animate({height:'100px'},{queue:false, duration:600, easing: 'linear'}).addClass('header-down'); 
        }
        else{
            $(".someBoxClass").stop().animate({height:'30px'},{queue:false, duration:600, easing: 'linear'}).removeClass('header-down');
        }

    }); 


    $(document).click(function() {
        if($(".someBoxClass").hasClass('header-down')){
            $(".someBoxClass").stop().animate({height:'30px'},{queue:false, duration:600, easing: 'linear'}).removeClass('header-down');
    }
    });

    $(".someBoxClass").click(function(e) {
        e.stopPropagation(); // This is the preferred method.
               // This should not be used unless you do not want
                             // any click events registering inside the div
    });

1 个答案:

答案 0 :(得分:2)

检查jQuery.each http://api.jquery.com/jQuery.each/

您可以使用类作为选择器

来绑定每个按钮上的点击事件
$(".some-class").each(function(){
    $(this).on("click", function(){});
});

诀窍是jQuery .each()将确保函数内部的this是DOM节点。