选择文本时阻止onClick事件

Pat*_*ikJ 20 html javascript jquery show-hide

我有这个问题,我需要在单击表格单元格时显示和隐藏div.但是,我也希望人们能够在单元格中选择文本并将其复制而不隐藏信息.

如有必要,完全可以更改设计.:)

这是一个演示这个问题的小提琴

http://jsfiddle.net/k61u66ek/1/

这是小提琴中的HTML代码:

<table border=1>
    <tr>
        <td>
            Information
        </td>
        <td onClick="toggleInfo()">
            <div id="information" style="display:none">
                More information that I want to select without hiding
            </div>
            <div id="clicktoshow">
                Click to show info
            </div>

        </td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

这是javascript:

function toggleInfo() {
    $("#clicktoshow").toggle();
    $("#information").toggle();    
}
Run Code Online (Sandbox Code Playgroud)

任何建议/建议非常感谢!

/帕特里克

Jam*_*xon 33

一种选择是检查返回typeSelection对象window.getSelection:

function toggleInfo() {
    var selection = window.getSelection();
    if(selection.type != "Range") {
        $("#clicktoshow").toggle();
        $("#information").toggle();
    }
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/k61u66ek/4/

更新

如果您要定位的浏览器未typeSelection对象上公开属性,则可以测试所选值的长度:

function toggleInfo() {
    var selection = window.getSelection();
    if(selection.toString().length === 0) {
        $("#clicktoshow").toggle();
        $("#information").toggle();
    }
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/k61u66ek/9/

这可以反过来减少到bool检查toString:

if(!selection.toString()) {

http://jsfiddle.net/k61u66ek/10/


Eug*_*nic 13

代码片段- 当文本突出显示/选择时取消点击事件:

document.getElementById('information').addEventListener('click', (e) => {
  const cellText = document.getSelection();
  if (cellText.type === 'Range') e.stopPropagation();
})
Run Code Online (Sandbox Code Playgroud)

演示链接:http://jsfiddle.net/5472ja38/

解释

document.getSelection().type检查文档对象级别是否有任何文本已突出显示。如果是这样,类型属性等于“范围”,停止事件传播,这将取消单击切换按钮更改。

摘自MDN

描述当前选择类型的 DOMString。可能的值为:

无:当前尚未做出选择。

插入符号:所选内容已折叠(即插入符号放置在某些文本上,但未选择任何范围)。

范围:已选择一个范围。


Bob*_*les 5

您可以检查click事件处理程序中是否有选择:

window.getSelection().toString();
Run Code Online (Sandbox Code Playgroud)


Gur*_*Rao 5

您可以使用mouseup,mousedownmousemove事件来实现这一点:

演示

var isDragging = false;
$("#clickshow")
.mousedown(function() {
    isDragging = false;
})
.mousemove(function() {
    isDragging = true;
 })
.mouseup(function() {
    var wasDragging = isDragging;
    isDragging = false;
    if (!wasDragging) {
        $("#information").toggle();
        $("#clicktoshow").toggle();
    }
});
Run Code Online (Sandbox Code Playgroud)

来源