Есть ли способ узнать, был ли обработчик событий запущен с кодом в jQuery без пользовательских флагов? - PullRequest
3 голосов
/ 25 ноября 2010

Рассмотрим этот код jQuery ...

$('button#my').click(function(event) {
    alert('hello');
});

$('button#my').click();

Очевидно, это вызовет окно предупреждения.

Однако могу я сказать, только с помощью jQuery, был ли этот обработчик событий вызван кодом или пользователь щелкнул по нему (без проверки флага, например, var userClicked = true).

Я думал, что будет свойство event, но я не мог понять это.

Возможно ли это?

Спасибо.

Ответы [ 3 ]

7 голосов
/ 25 ноября 2010

Вы можете проверить event.which, это будет undefined для вызовов .click() (или другого триггера) ... например:

$('button#my').click(function(event) {
    if(event.which) {
        alert("User click");
    } else {
        alert("triggered click");
    }
});

Вы можете попробовать здесь .

1 голос
/ 25 ноября 2010

Поздний ответ. Ответ Ника сработает, но вы можете сделать это немного более явно.

Вы можете определить свой .click() с дополнительными параметрами и передать эти параметры, используя .trigger('click') вместо .click().

Пример: http://jsfiddle.net/patrick_dw/jWFAn/

// Passed via .trigger() ----------------v
$('button#my').click(function(event, wasManual) {
    if( wasManual ) {
        alert('triggered in code');
    } else {
        alert('triggered by mouse');
    }
});

  // Array of additional args------v
$('button#my').trigger( 'click', [true] );

Таким образом, он использует явную функцию jQuery в поддерживаемом виде.

1 голос
/ 25 ноября 2010

Я только что попробовал это, и между ними много различий; установите Firebug и попробуйте $("button#my").click(console.log), и вы увидите событие, зарегистрированное при нажатии или click(). Одним из них является event.currentTarget, который является элементом при нажатии, или document, когда click() ed (может быть изменено в зависимости от области, в которой он вызывается, эксперимент). Есть и другие отличия - (offset|client|layer)[XY] все настроено для клика, но не click(), и даже больше.

(Правка: как говорит Ник, event.which - это другое; для клика это 1 и не определено для click().)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...