2009-05-21 68 views
16

这是一个特定的问题,所以我会立即明白这一点。如何使用JavaScript临时禁用文本选择?

我工作的一个短期和简单的拖放和Web应用程序的一部分掉落常规,虽然拖放位正常工作,该网站的操作,因为浏览器仍对中去所有丑陋tastic默认操作,并在文本选择工作。

我已经尝试了一些解决方案,主要涉及从mousedown返回false或点击事件,尽管它们在某些浏览器中禁用文本选择,但它们似乎也完全禁用了mouseup事件,从而破坏了“drop”位脚本并将此perma浮动图标悬挂在鼠标周围 - 无趣。

我真的不希望文本选择是完全消失了,我只是想表明,浏览器...不这样做的同时拖动,如果是有道理的。由于我知道受影响的区域(涉及iframe),我可以轻松地将属性应用于受影响的元素等。如有必要,我可以发布代码,但我正在寻找更多的常规解决方案。由于这只是一种美学,所以我正在寻找一种适用于大多数浏览器的修复方法,但这并不是那么重要。

谢谢!

+0

...和冗余冠军的攻击开始了,我要踢自己。^_ ^我真的应该知道“程序化”隐含在这里。 – 2009-05-21 06:04:08

回答

18

在W3C的浏览器,你可以调用event对象的preventDefault方法。 IE相当于将returnValue设置为false

function stopDefault(e) { 
    if (e && e.preventDefault) { 
     e.preventDefault(); 
    } 
    else { 
     window.event.returnValue = false; 
    } 
    return false; 
} 

编辑:只是重新读取问题,你可能还需要防止在处理实际拖动部分代码的默认操作,而不是只在初始鼠标按下或点击。

+0

这有效,但它似乎杀死了mouseup事件。这样做后,有没有办法检测按钮被释放的时间? – 2009-05-21 18:30:08

0

据我所知,拖动的元素必须被定位在下鼠标指针的其他元素。如果它将随鼠标指针一起移动,则会阻止页面上的任何选择。

+1

这似乎不是真的。我使用的方法是一个幽灵方法,我创建了一个拖放对象的虚拟副本,并且实际上并没有从旧页面中删除它,直到放下成功为止。 – 2009-05-21 18:20:53