`return false` в обработчике событий, прикрепленном addEventListener или element.on * - PullRequest
4 голосов
/ 11 августа 2010

Хорошо, давайте сначала разберемся с этим.Да, я хочу скрыть контекстное меню.Нет, я не пытаюсь помешать кому-то снять контент с моей страницы.Предполагаемое использование - ввод данных в браузерной игре, и он будет ограничен определенной областью на веб-странице.

Переход от идеологического к техническому ...

var mouse_input = function (evt) {
    // ...
    return false;
}

document.onmousedown = mouse_input; // successful at preventing the menu.
document.addEventListener('mousedown', mouse_input, true); // unsuccessful

Можеткто-нибудь объяснит мне, почему версия addEventListener не может остановить срабатывание контекстного меню?Единственное отличие, которое я смог увидеть в Safari Web Inspector , заключалось в том, что document.onmousedown имел значение isAttribute, которое было истинным, в то время как версия addEventListener имела то же значениекак ложь

Ответы [ 2 ]

4 голосов
/ 12 августа 2010

Чтобы объяснить разницу .. element.onmousedown = somefunction; - абсолютное назначение;вы заменяете обработчик события на элементе.element.addEventListener(...), как следует из названия, добавляет обработчик в дополнение к любым обработчикам, уже подключенным к событию.

4 голосов
/ 12 августа 2010

Так что мой бесполезный поиск внезапно стал плодотворным.

var mouse_input = function (evt) {
    evt.preventDefault();
}

document.addEventListener('contextmenu', mouse_input, false);

Работает для Safari , Firefox , Opera . preventDefault() останавливает обычные действия. Мне пришлось изменить событие, которое прослушивалось, чтобы приспособиться к Safari , и в любом случае это более логично. Дополнительная информация: функции, которые реализуют EventListener , не должны возвращать значения, поэтому return false не имел никакого эффекта.

...