Различные методы, основанные на Modernizr: клик против наведения - PullRequest
1 голос
/ 13 мая 2011

Я хочу иметь возможность выбирать между событиями .mouseover и .click на основе вывода касания / отсутствия касания Modernizr.

if (Modernizr.touch) {
  $(el).click(stuff);
  $(el).click(stuff);
} else {
  $(el).mouseover(stuff);
  $(el).mouseover(stuff);
}

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

if (Modernizr.touch) {correctEvent = click} else {correctEvent = mouseover}
$(el).correctEvent(stuff);
$(el).correctEvent(stuff);

1 Ответ

6 голосов
/ 13 мая 2011

Да, это легко с альтернативной нотацией доступа к объекту []:

var eventName = Modernizr.touch ? 'click' : 'mouseover';
$(el)[eventName](stuff);

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

var foo = { bar: 100 };
console.log(foo.bar);
console.log(foo['bar']);

Две строки практически идентичны.

Поскольку click и mouseover являются свойствами выбора jQuery, вы можете получить к ним доступ следующим образом. Например, вы могли бы (если бы вы были так склонны) вызвать метод click как $(el)['click'](). Там не было бы никакого смысла, но вы могли бы сделать это.

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

Редактировать. Дополнительную документацию по этому вопросу см. На странице MDC "Операторы-члены" .

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