我查找了jquery select text事件,并找到了this example。 在此示例中,mouseup事件工作以及dbclick事件。
我使用返回值为此代码添加一个函数,但现在dbclick不起作用。 jsFiddle
if(!window.James){ 詹姆斯= {}; }
James.Selector = {};
James.Selector.mouseup = function (e) {
var userSelection;
if (window.getSelection) {
userSelection = window.getSelection();
}
else if (document.selection) {
// should come last; Opera!
userSelection = document.selection.createRange();
}
var selectedText = userSelection;
if (userSelection.text) selectedText = userSelection.text;
if (selectedText != '') {
return selectedText + '------' + e.pageX + '/' + e.pageY;
}
}
$(document).ready(function () {
$(document).bind("mouseup", function (e) {
alert(James.Selector.mouseup(e))
window.getSelection().removeAllRanges();
});
});
答案 0 :(得分:1)
我认为你的意思是这样的:http://jsfiddle.net/WBLQz/11/
只需设置一个setTimeout()
即可让它也能用于dblclick。
答案 1 :(得分:0)
导致问题的陈述是这样的:让我们称之为“问题陈述”:if (selectedText != '') {
在原始代码中,一旦满足此条件,程序就会输出警报。所以踩过两个代码......
您单击:
原始代码到达问题陈述,并且在未选择任何内容时不输出警告
您的代码到达问题陈述并且不会返回值,因为问题陈述失败,但是您的警报声明始终执行。
因此,在原始代码中,可能看起来函数是在doubleclick上调用但不是单击。这不是真的,它总是被执行。但是现在使用浏览器,“双击”会突出显示空格或字符之间的字符串,因此(selectedText != '')
您可以在执行警报之前使用简单的if语句修复此问题
$(document).ready(function () {
$(document).bind("mouseup", function (e) {
if (James.Selector.mouseup(e) !== undefined)
alert(James.Selector.mouseup(e))
});
window.getSelection().removeAllRanges();
});
if (James.Selector.mouseup(e) !== undefined)
只有在选中或双击时才会执行警报。
请注意我移动了声明:window.getSelection().removeAllRanges();
在绑定功能之外,因此关闭警报后不会删除选择。