jQuery.click (): Могу ли я получить ссылку на синтетический объект события, переданный обработчикам событий? - PullRequest
0 голосов
/ 26 января 2010

У меня <a> внутри <TD>, и я пытаюсь получить клики на <TD>, но за пределами <A>, действовать так, как будто они были кликами на <a>. Я почти у цели:

HTML:

<TD class="somethingPretty">
    <a href="someURL" class="anchor">Text</a>
</td>

JS:

$('.anchor').click(function(ev){return confirm("go ahead?");});
$('somethingPretty').click(function(ev){
    if($('.anchor').click()){
        document.location = $('.anchor').attr('href');
    }
}

Проблема в том, что jQuery.click возвращает undefined, и я не вижу, как получить объект события, который передается обработчикам щелчков, чтобы я мог опросить его с помощью isPropagationStopped и isDefaultPrevented. Как правильно решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 26 января 2010

Иногда ясно задать вопрос - лучший способ найти ответ. Некоторое стратегическое осмысление источника jQuery привело меня к следующему решению (с использованием разметки выше):

$('.somethingPretty').click(function(ev){
    var syntheticClick = new $.Event("click");
    syntheticClick.stopPropagation();
    $('.anchor').trigger(syntheticClick);
    if(syntheticClick.isDefaultPrevented()) return;
    document.location = $('.anchor').attr('href');
}

Это работает для всех обработчиков событий, кроме живых, с привязкой (они не выполняются; мои пользователи должны научиться выбирать для них сам якорь!). Сложность в том, что trigger занимает jQuery.Event в дополнение к документированной строке.

0 голосов
/ 26 января 2010

Вы пробовали что-то вроде:

$("td.outer").add("td.outer a").click(function() { 
   // do stuff
});

Вы захотите найти способ убедиться, что все, что находится в функции, выполняется только один раз, поскольку щелчок по <a> будет учитываться как щелчок по <td> и <a>.

0 голосов
/ 26 января 2010

Как насчет этого?


var a = $('.somethingPretty .anchor');
var td = $('.somethingPretty');

a.click( function(ev) { return confirm("go ahead?"); } );
td.click( function() { a.click(); } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...