Есть ли способ использовать eventData с .bind () с «keydown» eventType? - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь сделать что-то вроде:

var keydownHandler = function (ev) {
    alert(ev.data.test);
    return false;
}

$(document).bind('keydown', {test: 'foo'}, keydownHandler);

Но .bind , похоже, не работает, так как возвращает null , а нажатие клавиши не запускает обработчик. Заменяя «keydown» на «click» eventType, обработчик событий правильно регистрируется и работает.

Мой текущий код использует анонимную функцию, подобную этой:

var config = ...;
$(document).bind('keydown', config.shortcut, function (e) {
    config.click();
    e.stopPropagation( );
    e.preventDefault( );
}

return false;
} );

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

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 28 марта 2011

Это связано с тем, что загружен плагин горячих клавиш , для которого требуется установить параметр "combi" :

var keydownHandler = function (ev) {
    alert(ev.data.test);
    return false;
}

$(document).bind('keydown', {combi: 'x', test: 'foo'}, keydownHandler);
0 голосов
/ 23 марта 2011

Первый приведенный вами пример работает для меня (как показано в Fiddle здесь: http://jsfiddle.net/YFBsE).

Если вы хотите извлечь свою анонимную функцию (например, повторно использовать), и вам нужно пройтиДанные для функции, которые отличаются от варианта использования к варианту использования, вы должны рассмотреть возможность использования метода, как показано ниже:

function buildHandler (data) {
    return function (event) {
      alert(data.test);

        return false;
    }; 
};

$(document).bind('keydown', buildHandler({ test: 'foo' }));
$(document).bind('click', buildHandler({ test: 'bar' }));

Смотрите его в действии здесь: http://jsfiddle.net/U8cvk/

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