.ondragstart不等于.addEventListener("dragstart")

Tin*_*oni 6 javascript drag-and-drop firefox-addon dom-events

我想使img元素不可选择和不可分割,因为我将它用作窗口大小调整控件(单击并拖动周围的div调整窗口大小).

它完美地工作如下:

noSelect[x].ondragstart = function() {return false};
Run Code Online (Sandbox Code Playgroud)

但由于这将在firefox(3.6.*)扩展中使用,该扩展在每个HTMLElement周围使用XPCNativeWrapper,我不能使用".onsdragstart"并且必须使用".addEventListener"

问题是相当于上面的代码不起作用.单击并拖动img会触发firefox的默认图像拖动,而不是在以下内容中调整窗口大小:

noSelect[x].addEventListener("dragstart", function () {return false}, false)
Run Code Online (Sandbox Code Playgroud)

上面引用的两行代码不相同吗?

不可选对象的完整上下文:

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
    }
Run Code Online (Sandbox Code Playgroud)

Nic*_*lay 5

addEventListener注册一个EventListener,它没有任何特殊的返回代码处理.

从大多数on*事件处理程序返回false会根据HTML规范取消事件,在常规EventListener中,这可以通过调用event.preventDefault()他在答案中提到的Neil 来实现.


kap*_*apa 1

  1. ondragstart 是一个仅适用于 IE 的事件,这就是它在 Firefox 中不触发的原因。更新:它比这更复杂,请在此处阅读更多内容:Javascript ondrag、ondragstart、ondragend
  2. 如果 ondragstart 在 FF 中可用,您可以使用 x.ondragstart=... 来捕获它,它也可以在 FF 中使用。
  3. addEventListener 只是分配事件处理程序的一种更好的方法,它允许您将一个事件的多个处理程序附加到一个元素。IE 有一个类似的事件,称为attachEvent。

关于您的问题:在非 IE 浏览器中,要使对象不可选择,您必须捕获 onmousedown 事件并阻止默认行为。