我正在尝试实现一个基于点击并按住的弹出式菜单,其位置使得(实际)慢点击仍会触发默认操作,并设置延迟以便进行文本选择手势通常不会触发菜单。
我似乎无法做的是以一种不会阻止文本选择的方式取消文本选择:从事件处理程序返回false(或调用$(this).preventDefault()
)可以防止用户根本没有选择,显而易见的$().trigger('mouseup')
根本没有对选择做任何事情。
e.stopPropogation()
不会取消文字选择。答案 0 :(得分:5)
试试这个:
var input = document.getElementById('myInputField');
if (input) {
input.onmousedown = function(e) {
if (!e) e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}
}
如果没有,请阅读:
答案 1 :(得分:4)
除了顶级帖子之外,还有一种官方方式可以实现我认为你想要的DOM。您可以用来代替事件的东西称为范围对象。
考虑,(最终在FF3上运作)
window.onclick = function(evt) { // retrieves the selection and displays its content var selectObj = window.getSelection(); alert(selectObj); // now collapse the selection to the initial point of the selection var rangeObj = selectObj.getRangeAt(0); rangeObj.collapse(true); }
不幸的是,这与IE,Opera,Chrome或Safari不太相关;不确定原因,因为在Opera,Chrome或Safari中,有一些与collapse和getRangeAt方法相关的东西。如果我知道更多,我会告诉你的。
我以前的答案更新,一个更普遍的工作是选择对象和折叠,collapseToStart,collapseToEnd方法。 (link text)
现在考虑上面的2.0:
window.onmouseup = function(evt) { var selectObj = window.getSelection(); alert(selectObj); // to get a flavor of what you selected // works in FF3, Safari, Opera, and Chrome selectObj.collapseToStart(); // works in FF3, Safari, Chrome (but not opera) /* selectObj.collapse(document.body, 0); */ // and as the code is native, I have no idea why... // ...and it makes me sad }
答案 2 :(得分:2)
我不确定这是否会有所帮助,但是这里有一些取消选择文字的代码:
// onselectstart is IE-only
if ('undefined' !== typeof this.onselectstart) {
this.onselectstart = function () { return false; };
} else {
this.onmousedown = function () { return false; };
this.onclick = function () { return true; };
}
此上下文中的“this”将是您要阻止文本选择的元素。
答案 3 :(得分:0)
$(this).focus()
(或类似document.body.focus()
的任何内容)似乎都可以解决这个问题,尽管我没有对ff3进行过多次测试。
答案 4 :(得分:0)
这个问题的答案对我有用: How to disable text selection using jquery?
(它不仅禁用,而且取消,任何文字选择 至少在FF和Chrome的计算机上。)
以下是答案:
.attr('unselectable', 'on')
'-ms-user-select': 'none',
'-moz-user-select': 'none',
'-webkit-user-select': 'none',
'user-select': 'none'
.each(function() { // for IE
this.onselectstart = function() { return false; };
});
答案 5 :(得分:0)
感谢骑士开始普遍解决方案。这种轻微的修改还包括对IE 7-10(可能是6)的支持。
我遇到类似于cwillu-gmail的问题..需要附加到shift-click事件(按住shift键时单击标签)以在特定的“设计”模式下执行某些备用功能。 (是的,听起来很奇怪,但它是客户想要的。)这部分很容易,但是有选择文本的烦人效果。这对我有用:(我用onclick但你可以使用onmouseup ..取决于你想要做什么以及什么时候)
var element = document.getElementById("myElementId");
element.onclick = function (event)
{
// if (event.shiftKey) // uncomment this line to only deselect text when clicking while holding shift key
{
if (document.selection)
{
document.selection.empty(); // works in IE (7/8/9/10)
}
else if (window.getSelection)
{
window.getSelection().collapseToStart(); // works in chrome/safari/opera/FF
}
}
}