Javascript 如何禁用Firefox';使用jQuery时所有图像的默认拖放行为?

Javascript 如何禁用Firefox';使用jQuery时所有图像的默认拖放行为?,javascript,jquery,firefox,browser,Javascript,Jquery,Firefox,Browser,Firefox有一个恼人的行为,默认情况下,它允许用户拖放任何图像元素。如何使用jQuery完全禁用此默认行为?以下内容将在Firefox 3及更高版本中实现: $(document).on("dragstart", function() { return false; }); 如果您不希望禁用所有拖动(例如,您可能仍希望允许用户将链接拖动到其链接工具栏),则可以确保仅阻止元素拖动: $(document).on("dragstart", function(e) { if

Firefox有一个恼人的行为,默认情况下,它允许用户拖放任何图像元素。如何使用jQuery完全禁用此默认行为?

以下内容将在Firefox 3及更高版本中实现:

$(document).on("dragstart", function() {
     return false;
});
如果您不希望禁用所有拖动(例如,您可能仍希望允许用户将链接拖动到其链接工具栏),则可以确保仅阻止元素拖动:

$(document).on("dragstart", function(e) {
     if (e.target.nodeName.toUpperCase() == "IMG") {
         return false;
     }
});

请记住,这将允许拖动链接中的图像。

是否需要使用jQuery?您只需要使用
event.preventDefault()
,为相关图像上的mousedown事件定义一个回调函数

因此,您的图像标签可以如下所示:

如果,则需要附加的
,否则IE会抛出错误。如果希望所有图像标记都使用jQuery,只需使用jQuery遍历
img
标记并附加onmousedown事件处理程序


这一页上有一个很好的解释(和示例):“这里有一个文档不太完整的版本,使用jQuery作为参考:”

我不记得我的源代码了,但仍然在工作

  <script type="text/javascript">

  // register onLoad event with anonymous function
window.onload = function (e) {
    var evt = e || window.event,// define event (cross browser)
        imgs,                   // images collection
        i;                      // used in local loop
    // if preventDefault exists, then define onmousedown event handlers
    if (evt.preventDefault) {
        // collect all images on the page
        imgs = document.getElementsByTagName('img');
        // loop through fetched images
        for (i = 0; i < imgs.length; i++) {
            // and define onmousedown event handler
            imgs[i].onmousedown = disableDragging;
        }
    }
};

// disable image dragging
function disableDragging(e) {
    e.preventDefault();
}
</script>

//使用匿名函数注册onLoad事件
window.onload=函数(e){
var evt=e | | window.event,//定义事件(跨浏览器)
imgs,//图像收集
i、 //用于本地循环
//如果存在preventDefault,则定义onmousedown事件处理程序
如果(evt.preventDefault){
//收集页面上的所有图像
imgs=document.getElementsByTagName('img');
//循环浏览获取的图像
对于(i=0;i
参考Tim Down的解决方案,您可以实现他的第二个代码片段,即在使用jQuery时仅禁用
img
拖动:

$(document).on("dragstart", "img", function() {
     return false;
});

没有jQuery的解决方案:

document.addEventListener('dragstart', function (e) {
    e.preventDefault();
});

如果Javascript是一个可选要求,那么可以尝试使用CSS

.wrapper img {
    pointer-events: none;
}

使用此解决方案,所有dragstart事件都将被禁用,包括链接(例如,将链接拖动到URL栏)。使用此解决方案,我无法使用jQuery UI为任何元素启用Dragable。是否可以同时禁用默认拖放和添加我自己的?@OlleHärstedt:您可以调整第二个示例,使其不返回可通过jQuery UI拖动的元素的
false
。抱歉,我不知道jQueryUIDragables如何工作的细节。恐怕不知道,因为可拖动或不可拖动的元素会发生变化。所以我需要一种方法将“returnfalse”设置为默认值。但我为此提出了另一个问题,谢谢。)如果您使用的是事件处理程序属性,那么只需执行
onmousedown=“return false;”“
,这将在所有浏览器中运行。我很满意Tim Down的解决方案,因为它非常简单,我提到jQuery是因为我认为它会更复杂一些。谢谢你的回答。preventDefault()是一个非常好的提示-对我来说做得非常好!小心,最近做这件事咬了我一口。。。防止mousedown上的默认值也将防止在iframe之外捕获mouseup事件等有用的事情(请参阅中的讨论)。像在其他答案中一样,阻止dragstart上的默认操作对我来说似乎更安全一些。