代码之家  ›  专栏  ›  技术社区  ›  Alekc

使用Jquery绑定多个元素

  •  9
  • Alekc  · 技术社区  · 16 年前

    我在使用jquery时遇到了一个小问题:我需要做这样的事情:

    $(document).ready(function(){
        links = {};
        links.a = "Link a";
        links.b = "Link b";
        links.c = "Link c";
    
        for (x in links){
            $("#" + x).css("border","1px solid #000");
            $("#" + x).click(function(){
                alert(x);
            });
        }
    });
    </script>
    <div id="a">a</div><br />
    <div id="b">b</div><br />
    <div id="c">c</div><br />
    

    当然,我可以通过编辑函数来使用div的id并使用$(this)来破解它,但对于cursiosity:有没有办法让这个循环工作?通过为函数中的每个元素创建并分配一个新函数?

    9 回复  |  直到 16 年前
        1
  •  4
  •   Sam Hasler zpesk    16 年前

    jQuery的优点是它允许链接和绑定多个元素,就像css一样。

    $(document).ready(function(){
    
        $('#a,#b,#c')
            .css("border","1px solid #000")
            .bind('click',function(){
                // do something
             });
    
    });
    
        2
  •  32
  •   Big J    15 年前

    $(document).ready(function(){
       links = {
          a:"Link a",
          b:"Link b",
          c:"Link c",
        };
    
        $.each(links, function(id,text){
          $("#"+id)
           .css("border","1px solid #000")
           .click(function(){ alert(text) })
        })
    });
    
        3
  •  6
  •   duckyflip    16 年前

    $(document).ready(function(){
        links = {};
        links.a = "Link a";
        links.b = "Link b";
        links.c = "Link c";
    
        for (var x in links){
            $("#" + x).css("border","1px solid #000");
            $("#" + x).click(
                function(xx){ 
                    return function() { alert(xx) };
                }(x)
            );
        };
    });
    
        4
  •  2
  •   Tushar Gupta - curioustushar    12 年前

    http://jsfiddle.net/FWcHv/

    $('#a') $('#b') $('#c') 相反,你应该这样称呼 $('#a,#b,#c')

    在我的代码中,我使用$.each传递了所有的id,并将它们组合在一起,在下一步中我使用了 存储在变量中 x

    我还检查了一下,如果 links{} 为空,将不会使用变量进行处理 i

    $(document).ready(function () {
        links = {};
        links.a = "Link a";
        links.b = "Link b";
        links.c = "Link c";
        i = 0;
        x = '';
        $.each(links, function (id) {
            x += "#" + id + ',';
            i++;
        });
        if (i > 0) {
            $($(x.slice(0, -1))).css("border", "1px solid #000").click(function () {
                alert($(this).text());
            });
        }
    });
    
        5
  •  1
  •   Ben Koehler    16 年前
    <script type="text/javascript">
    $(document).ready(function(){
        $('.links').css("border","1px solid #000");
        $('.links').live('click', function() {
            alert("Link " + $(this).attr('id'));
        });
    });
    </script>
    </head>
    <body>
    <div id="a" class="links">a</div><br />
    <div id="b" class="links">b</div><br />
    <div id="c" class="links">c</div><br />
    
        6
  •  0
  •   gradbot    16 年前

    $(document).ready(function(){
        links = {};
        links.a = "Link a";
        links.b = "Link b";
        links.c = "Link c";
    
        for (var x in links){
            $("#" + x).css("border","1px solid #000");
            $("#" + x).click(function(){
                    alert("Link "+this.id+" Alert!");
            });
        }
    });
    
        7
  •  0
  •   user434917    16 年前
    <script type="text/javascript">
    $(document).ready(function(){
        links = {};
        links.a = "Link a";
        links.b = "Link b";
        links.c = "Link c";
    
        for (x in links){
            $("#" + x).css("border","1px solid #000").click(function(){
                    alert($(this).attr('id'));
            });
        }
    });
    </script>
    
    </head>
    
    <body>
    
    <div id="a">a</div><br />
    <div id="b">b</div><br />
    <div id="c">c</div><br />
    
        8
  •  0
  •   KyleFarris    16 年前

    鉴于你正在对要生效的元素进行硬编码,你最好这样做,因为它可能更快、更干净,IMO:

    $("#a,#b,#c").css("border","1px solid #000");
    $("#a,#b,#c").click(function(){
        alert("Link "+this.id+" Alert!");
    });
    

    编辑: 我没有看到你问题的最后一部分。..对不起。您也可以这样做:

    var links = {};
    links.a = "Link a";
    links.b = "Link b";
    links.c = "Link c";
    
    var ids = '';
    $.each(function(key,val) {
        ids += "#"+key+","; // extra commas are ignored in jQuery
    });
    
    $(ids)
        .css("border","1px solid #000")
        .bind('click',function(){
            alert("Link "+this.id+" Alert!");
        });
    
        9
  •  0
  •   Basic    14 年前

    尝试使用:

    $(window).load(function(){
    
    }); 
    

    推荐文章