使用jQuery对多个事件进行延迟绑定

时间:2008-12-28 15:21:03

标签: jquery events dynamic bind

这是一个场景:我有一组按钮,我想在点击时绑定到相应的功能。这些按钮的ID与其相应功能的名称相同。我能做到这一点:

$("#kick").click(kick);
$("#push").click(push);
$("#shove").click(shove);

但我很懒,想更懒惰地做这件事(就我的本性而言)。由于按钮都包含在块元素中,我想做这样的事情:

$("#button_holder > span").each(function () {
    var doThis = this.id;
    $(this).click(doThis);
});

除此之外不起作用。有什么建议吗?

5 个答案:

答案 0 :(得分:7)

与其他回答者一样,我不确定这是“真正的”懒惰(如程序员的优点),但只有你知道你的实现细节。

如果你真的想做这样的事情,你可以使用一个对象来存储你的特定功能,然后使用字符串来查找它们:

var myFunction = {
     kick:  kick,
     push:  push,
     shove: shove
};

$("#button_holder > span").each(function () {
    var doThis = this.id;
    $(this).click(myFunction[doThis]);
});

或者作为匿名函数:

var myFunction = {
     kick:  function() { /*do kick  */ },
     push:  function() { /*do push  */ },
     shove: function() { /*do shove */ }
};

$("#button_holder > span").each(function () {
    var doThis = this.id;
    $(this).click(myFunction[doThis]);
});

答案 1 :(得分:0)

$("#button_holder > span").each(function () {
    var doThis = this.id;
    $(this).click(function(doThis){
      alert(doThis);
    });
});

答案 2 :(得分:0)

<input type="submit" id="kick" value="Kick Me">
<input type="submit" id="push" value="Push Me">

<script type="text/javascript>
$(function() {
    $("input[type=submit]").each(function () {
        var doThis = this.id;
        $(this).click(doThis);
    });
});
</script>

答案 3 :(得分:0)

我想我没有看到这一点。无论如何,您需要单独创建每个函数,这种编程通常很难让其他人编程。也许如果你有几十个按钮并且它是丢弃的代码,我可以理解但是......可能不是......

为什么不将all绑定到单个函数并在事件时间基于this.id进行确定?

答案 4 :(得分:0)

它非常简单! 你试图将无函数传递给click方法。

var doThis = this.id;
$(this).click(doThis);

你需要传递一个函数:

 $(this).click(function(doThis){
      alert(doThis);

});

或:

function myFunc(){};
$(this).click(myFunc);