.ondragstart不等于.addEventListener(“dragstart”)

时间:2011-01-14 06:00:11

标签: javascript javascript-events drag-and-drop firefox-addon

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

完全正常如下:

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

但是因为这将在firefox(3.6。*)扩展中使用,它在每个HTMLElement周围使用XPCNativeWrapper,我不能使用“.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 个答案:

答案 0 :(得分:5)

addEventListener注册了EventListener,它没有任何特殊的返回代码处理。

从大多数on*事件处理程序cancels the event per the HTML spec返回false,在常规EventListener中,这可以通过调用他在答案中提到的event.preventDefault()来实现。

答案 1 :(得分:1)

  1. ondragstart是一个仅限IE的活动, 这就是它没有开火的原因 Firefox浏览器。 更新:它比这更复杂,请在此处阅读更多内容:Javascript ondrag, ondragstart, ondragend
  2. 如果在FF中有ondragstart,你可以抓住它 x.ondragstart = ...,它适用于FF 太
  3. addEventListener只是一种分配事件处理程序的更好方法 允许您附加多个 事件处理程序到元素。 IE有一个等效的sorf 的attachEvent。
  4. 关于您的问题:在非IE浏览器中,要使对象无法选择,您必须捕获onmousedown事件并阻止默认行为。

答案 2 :(得分:1)

我不知道为什么function() { return false; }不起作用,但我知道function(event) { event.preventDefault(); }可以在Firefox中使用。