2009-12-11 39 views
3

什么是跨浏览器方法?我需要防止对图像执行任何默认操作,以便拖动或其他任何操作都不会在默认的基础上触发。我们如何防止JavaScript中的默认操作?

+0

请说明你的问题 – Pierreten 2009-12-11 07:03:13

+0

一切都很清楚。仔细读。 – 2009-12-11 07:19:13

+4

艾伦安德森,如果有人要求你澄清你的问题,你可能会认为,你看起来很清楚的东西并不一定对其他人清楚。你的问题是非常不清楚的。 – eyelidlessness 2009-12-11 08:10:56

回答

1

您只能取消特定事件。您不能“全局取消”默认操作。

为了具体取消dragging的图像(其仅是缺省功能在某些浏览器),则返回falsemousedown事件。

+2

您可以全局取消很多默认操作,但不是全部。在这种情况下(原谅糟糕的代码)'document.onmousedown = function(e){if(typeof e =='undefined')e = window.event; if(e.preventDefault)e.preventDefault();如果(e.stopPagagation)e.stopPropagation(); e.returnValue = false;返回false; };但显然这会产生很多令人讨厌的副作用。 – eyelidlessness 2009-12-11 07:09:02

+0

的确如此,这会产生令人讨厌的副作用,但肯定更多的是全球概念。 – 2009-12-11 07:10:55

+0

补充:适用于几乎任何气泡的事件。对于“事件授权”(显然这是一个重叠的概念,并不完全是1:1)和非冒泡事件已经取得了一些进展,但我不知道这些事件是如何实现的。我知道jQuery最近的alpha已经开始实现这些,所以它可能值得一看。 – eyelidlessness 2009-12-11 07:14:01

5

您可以注册要取消的活动,然后从其中注册return false或使用Event.preventDefault(),具体取决于浏览器和事件。

+0

这不适用于跨浏览器。但是海报并未指定哪些浏览器是针对的。 – squiddle 2009-12-11 10:28:49

4
(function() { 
    var onmousedown; 
    if('onmousedown' in document && typeof document.onmousedown == 'function') { 
     onmousedown = document.onmousedown; 
    } 
    document.onmousedown = function(e) { 
     if(typeof e == 'undefined') { 
      e = window.event; 
     } 
     if(!e.target) { 
      e.target = e.srcElement || document; 
     } 
     if('nodeName' in e.target && e.target.nodeName.toLowerCase() == 'img') { 
      if(e.preventDefault) { 
       e.preventDefault(); 
      } 

      // If you want to register mousedown events for 
      // elements containing images, you will want to 
      // remove the next four lines. 
      if(e.stopPropagation) { 
       e.stopPropagation(); 
      } 
      e.cancelBubble = true; 

      e.returnValue = false; 
      return false; 
     } 

     if(onmousedown !== undefined) { 
      onmousedown(e); 
     } 
    }; 
})(); 

你可能需要做一些类似你想阻止其他事件的东西,如果你想要的东西,这并不这样做。

另外值得注意的是,如果您试图阻止人们将图片从网页下载到他们的计算机上,您将无法获得成功。如果浏览器可以下载图像,用户也可以下载。使用JavaScript来阻止(一些)尝试很容易通过简单地禁用JavaScript来绕过。