【问题标题】:How do we prevent default actions in JavaScript?我们如何防止 JavaScript 中的默认操作?
【发布时间】:2010-01-10 09:37:59
【问题描述】:

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

【问题讨论】:

  • 一切都清楚了。仔细阅读。
  • Ale Anderson,如果人们要求您澄清您的问题,您可能会认为您认为清楚的事情对其他人来说不一定清楚。您的问题非常不清楚。
  • 至少定义“图像的默认操作”是什么。这对我来说是新的。

标签: javascript


【解决方案1】:

您可以注册要取消的事件,然后根据浏览器和事件,从他们那里return false 或使用Event.preventDefault()

【讨论】:

  • 这不能跨浏览器工作。但发帖人并没有具体说明针对哪些浏览器。
【解决方案2】:
(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 来规避。

【讨论】:

    【解决方案3】:

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

    要专门取消dragging 一个图像(这只是某些浏览器的默认功能),请将false 返回到mousedown 事件。

    【讨论】:

    • 您可以全局取消很多默认操作,但不能全部取消。在这种情况下(原谅糟糕的代码)document.onmousedown = function(e) { if(typeof e == 'undefined') e = window.event; if(e.preventDefault) e.preventDefault(); if(e.stopPropagation) e.stopPropagation(); e.returnValue = false; return false; }; 但显然这会产生大量令人讨厌的副作用。
    • 没错,这会产生令人讨厌的副作用,但绝对是一个全球性的概念。
    • 补充一点:这几乎适用于任何冒泡的事件。非冒泡事件的“事件委托”(显然这是一个重叠的概念,并不完全是 1:1)已经取得了一些进展,但我真的不知道这些是如何实现的。我知道 jQuery 最近的 alpha 已经开始实现这些,所以可能值得一看。
    • 我不是要取消所有默认操作。我要求一种方法来取消仅对图像的默认操作。
    • Ale Anderson,什么“默认操作”?有许多可用的操作。
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2021-12-28
    相关资源
    最近更新 更多