.ondragstart не эквивалентно .addEventListener ("dragstart" - PullRequest
6 голосов
/ 14 января 2011

Я хочу сделать элемент img невыбираемым и не удаляемым, потому что я использую его в качестве элемента управления изменением размера окна (щелчок и перетаскивание по окружающему элементу div изменяет размер окна).

Прекрасно работает следующим образом:

noSelect[x].ondragstart = function() {return false};

Но так как это будет использоваться в расширении Firefox (3.6. *), Которое использует XPCNativeWrapper вокруг каждого HTMLElement, я не могу использовать ".onsdragstart" и должен использовать ".addEventListener"

Проблема в том, что приведенный выше код не работает. Щелчок и перетаскивание img запускает перетаскивание изображений по умолчанию в Firefox вместо изменения размера моего окна следующим образом:

noSelect[x].addEventListener("dragstart", function () {return false}, false)

Разве две строки кода, приведенные выше, не эквивалентны?

Полный контекст для невыбираемых объектов:

var noSelect = document.getElementsByClassName("noSelect")
    for (x in noSelect) {
        if (x == "length")
            break
        noSelect[x].unselectable = "on";
        noSelect[x].onselectstart = function(){return false};
        noSelect[x].ondragstart = function() {return false};
        noSelect[x].style.userSelect = "none"; // w3c standard
        noSelect[x].style.MozUserSelect = "none"; // Firefox
    }

Ответы [ 3 ]

5 голосов
/ 18 марта 2012

addEventListener регистрирует EventListener , который не имеет специальной обработки кода возврата.

Возвращение false из большинства on* обработчиков событий отменяет событие согласно спецификации HTML, в обычном EventListener это достигается путем вызова event.preventDefault(), как Нил упоминал в своем ответе.

1 голос
/ 22 января 2011

Я не знаю, почему function() { return false; } не работает, но я знаю, что function(event) { event.preventDefault(); } будет работать в Firefox.

1 голос
/ 14 января 2011
  1. ondragstart - это событие только для IE, вот почему он не стреляет в Fire Fox. ОБНОВЛЕНИЕ : это сложнее, чем это, подробнее здесь: Javascript ondrag, ondragstart, ondragend
  2. если бы ондрагстарт был доступен в FF, вы могли бы поймать его с помощью x.ondragstart = ..., работает в FF тоже.
  3. addEventListener - это просто более хороший способ назначения обработчиков событий, он позволяет прикрепить более одного обработчики события для элемента. IE имеет сорф-эквивалент под названием attachEvent.

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

...