如何在JavaScript中防止默认操作?

3
什么是跨浏览器的方法?我需要防止任何默认操作在图像上,以便既不拖动也不会发生其他默认行为。

一切都清楚了。请仔细阅读。 - Ale Anderson
4
Ale Anderson,如果人们要求你澄清你的问题,你可能会意识到对你来说似乎很清楚的事情不一定对其他人来说也是如此。你的问题非常不清楚。 - eyelidlessness
2
至少要定义“图像的默认操作”是什么。这对我来说是新的。 - Crescent Fresh
1
https://dev59.com/RXM_5IYBdhLWcg3wfTO7 - OrangeDog
3个回答

5

您可以注册要取消的事件,然后根据浏览器和事件使用return falseEvent.preventDefault()


这在跨浏览器上不起作用。但是海报也没有指定针对哪些浏览器。 - squiddle

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绕过。

1

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

要特别取消图像的拖动(这只是某些浏览器中的默认功能),请在mousedown事件中返回false


2
你可以全局取消许多默认操作,但并非全部。在这种情况下(请原谅糟糕的代码)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; }; 但显然这将产生大量不良副作用。 - eyelidlessness
这是正确的,那将会有严重的副作用,但绝对更具有全局性的概念。 - Doug Neiner
补充一下:这适用于几乎任何冒泡事件。对于非冒泡事件,“事件委托”已经取得了一些进展(显然,这是一个重叠的概念,不是完全一致的),但我不太清楚这些是如何实现的。我知道jQuery最近的alpha版已经开始实现这些功能,所以值得一看。 - eyelidlessness
我不是要取消所有默认操作。我只是想知道如何在图像上取消默认操作。 - Ale Anderson
1
Ale Anderson,"default action" 是什么?有很多可用的操作。 - eyelidlessness
@Ale,您实际上要求不执行默认行为“或任何其他操作”,而问题的标题引用了“操作”这个复数词。如果您只是指一种操作,那么您应该编辑您的问题以准确地表达您的需求。 - Doug Neiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接