Как объединить операторы if / else в JS? - PullRequest
0 голосов
/ 18 апреля 2010

Мне интересно, как правильно объединить эти операторы JS if / else?

if (window.addEventListener) { window.addEventListener('dosomething', foo, false); }
else { document.addEventListener('dosomething', foo, false); }

if (window.attachEvent) { window.attachEvent('dosomething', foo); }
else { document.attachEvent('dosomething', foo); }

РЕДАКТИРОВАТЬ I

Оригинальный код был:

if (window.attachEvent) { window.attachEvent('dosomething', foo); }
else if (window.addEventListener) { window.addEventListener('dosomething', foo, false); }
else { document.addEventListener('dosomething', foo, false); }

Теперь я хотел бы добавить

document.attachEvent('dosomething', foo);

здесь.

РЕДАКТИРОВАТЬ II

Оказывается, "document.addEventListener" / "document.attachEvent" являются избыточными, поэтому я оставлю это на

if (window.addEventListener) { window.addEventListener('dosomething', foo, false); } 
else if (window.attachEvent) { window.attachEvent('dosomething', foo); }

Спасибо всем!

Ответы [ 6 ]

1 голос
/ 18 апреля 2010

Исходный код выглядит хорошо, за исключением того, что сначала лучше проверить window.addEventListener, поскольку это стандартный интерфейс событий DOM. attachEvent следует использовать только как запасной вариант для версий IE до 9.

Я не знаю, что вы делаете с проверкой методов на window и document. Если метод существует для одного, он обязательно будет существовать для другого, поэтому ваша дополнительная опция никогда не появится.

Если нет ни window.addEventListener, ни window.attachEvent, вы используете древний браузер или браузер с ограниченными правами (например, мобильный телефон). Ни у одного из них не будет такого же метода на document; если они вообще поддерживают события, вы сможете связать их только с использованием событий старой школы window.onsomething= function() {...};.

1 голос
/ 18 апреля 2010

Вы не хотите «объединять» эти операторы if. Вы проверяете две совершенно разные вещи, даже если они связаны между собой. Я настоятельно призываю вас не делать этого.

1 голос
/ 18 апреля 2010

Оба условия выполняют разные задачи, вы не должны присоединяться к ним. Однако вы можете захотеть взглянуть на троичный оператор javascript , чтобы уменьшить ваш код.

0 голосов
/ 18 апреля 2010

Не был ли совет сформулировать операторы if / else в JS, такие как

if (foo) {
   bar();
} else {
   bla();
}

чтобы избежать проблем с точкой с запятой?

0 голосов
/ 18 апреля 2010

Вы можете использовать оператор || , чтобы сократить его до:

(window.addEventListener || document.addEventListener)('dosomething', foo, false);
(window.attachEvent || document.attachEvent)('dosomething', foo);

Это работает, потому что выражение expr1 || expr2 вычисляется следующим образом:

Возвращает expr1, если оно может быть преобразовано в true; в противном случае возвращает expr2. Таким образом, при использовании с логическими значениями, || возвращает true, если любой из операндов равен true; если оба имеют значение false, возвращает false.

0 голосов
/ 18 апреля 2010

Оставь их как есть.

Если вы действительно хотите улучшить свой код, используйте библиотеку js, которая может обрабатывать унифицированные события для всех браузеров (т.е. jQuery).

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