Javascript 如何禁用Firefox';使用jQuery时所有图像的默认拖放行为?
Firefox有一个恼人的行为,默认情况下,它允许用户拖放任何图像元素。如何使用jQuery完全禁用此默认行为?以下内容将在Firefox 3及更高版本中实现: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
$(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上的默认操作对我来说似乎更安全一些。