Ленивая привязка функций к нескольким событиям с помощью jQuery - PullRequest
3 голосов
/ 28 декабря 2008

Вот сценарий: у меня есть набор кнопок, которые я хочу привязать к соответствующим функциям при нажатии. Идентификаторы этих кнопок совпадают с названиями соответствующих им функций. Я мог бы сделать это:

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

Но я ленивый и хотел бы сделать это более лениво (как моя натура). Поскольку все кнопки содержатся в элементе блока, я хотел бы сделать что-то вроде этого:

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

За исключением того, что это не работает. Есть предложения?

Ответы [ 5 ]

7 голосов
/ 28 декабря 2008

Как и другие ответчики, я не уверен, что это «истинная» лень (как в достоинстве программиста), но только вы знаете детали вашей реализации.

Если вы действительно хотите сделать что-то подобное, вы можете использовать объект для хранения ваших конкретных функций, а затем использовать строку для их поиска:

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]);
});
0 голосов
/ 28 декабря 2008

это очень просто! вы пытаетесь передать не-функцию методу click.

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

вам нужно передать функцию:

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

});

или:

function myFunc(){};
$(this).click(myFunc);
0 голосов
/ 28 декабря 2008
<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>
0 голосов
/ 28 декабря 2008

Думаю, я не вижу в этом смысла. В любом случае вам нужно создавать каждую функцию индивидуально, и другим людям сложно подобрать такое программирование. Может быть, если у вас есть десятки кнопок, и это просто код, я мог бы понять, но .. вероятно, нет ...

Почему бы просто не связать все с одной функцией и сделать определение на основе this.id во время события ??

0 голосов
/ 28 декабря 2008
$("#button_holder > span").each(function () {
    var doThis = this.id;
    $(this).click(function(doThis){
      alert(doThis);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...