Еще один способ обработки общего шаблона обработки событий JQuery - PullRequest
3 голосов
/ 21 июня 2011

У меня есть следующий код, например

$("a.foo").bind(function (e){
    var t;
    if ( $(e.target).is("a") ){
        t = $(e.target);
    }else{
        t = $(e.target).parent("a");

    }
    var data = t.attr("data-info");

});

На английском. У меня может быть список якорей, в которых могут быть ряд пролетов. Каждый якорь объявлен как

<a class="foo" href="#" data-info="1">
    <span> ... </span>
    <span> ... </span>
</a>

<a class="foo" href="#" data-info="2">
    <span> ... </span>
    <span> ... </span>
</a>
...
...

Я привязываю обработчик к событию click якоря но объект события возвращается с привязкой ИЛИ одним из промежутков в зависимости от того, где я нажимаю. Таким образом, чтобы получить значение html5 "data-info" в В обратный вызов мне нужно вставить немного грязного кода. Это сейчас появляется во всем моем коде до точки, где я предполагаю, что может быть идиоматический способ обработки JQuery.

РЕДАКТИРОВАТЬ: фрагмент позвоночника, показывая мою реальную проблему (извините за кофе)

class DashboardView extends Backbone.View

  events:
    "click a.foo": "editLogItem"

  editLogItem: (e)->
    t = $(e.target).closest("a")

Ответы [ 3 ]

7 голосов
/ 21 июня 2011

Пример

$(this) получит элемент, определенный селектором, который вы также привязываете.

$("a.foo").click(function (e){
    var data = $(this).data("info");
});

Вы должны также использовать .data вместо1010 *

Редактировать:

Если this перезаписан, вы можете использовать e.currentTarget, который будет иметь то же значение.

1 голос
/ 21 июня 2011

Если обработчик присоединен к <a>, то в обработчике это всегда будет this, поэтому не имеет значения, какой была цель.чтобы получить значение атрибутов «data-xxx», вы можете использовать функцию «.data ()».

0 голосов
/ 21 июня 2011
$('a.foo').click(function () {
    var data = $(this).data('info');
});

Я использую обработчик кликов, потому что вы специально упомянули перехват события клика.

...