javascript - jQuery .click 不会触发跨越多个元素的用户选择事件

标签 javascript jquery jquery-events

我有一个函数(仍在开发中)需要捕获用户在 div 中选择的文本(不是文本区域和输入框,因此 .select 不起作用。)。当选择内容包含在该 div 中的单个元素内时,使用 .click 以及选择和范围对象效果很好,但如果用户选择跨越 div 中的多个元素(例如多个 p),则无法触发。

    $('.relevantDivClass').click(function(){
        console.log('Got here');
        SelObj = window.getSelection();
        Range = SelObj.getRangeAt(0);
        if (SelObj.anchorNode == SelObj.focusNode){
            console.log('executing same node branch');
            string = SelObj.toString();
            console.log(string)
        }
        else{
            console.log('executing multiple node branch');
            //code...
        }
    });

关于如何在这种情况下触发该事件有什么想法吗?它仍然在 relevantDivClass 内,所以我很困惑为什么 .click 不会触发。

最佳答案

使用.mouseup()而不是.click() 。当突出显示多个段落中的文本时,“mouseup”事件不会在触发“mousedown”的同一元素上触发——这是“click”事件的定义。 .click()适用于单个段落,因为您会在 <p> 上同时触发“mousedown”和“mouseup”元素,并且它向上冒泡到其父元素 <div> .

Working Demo

$(function() {
    $('.relevantDivClass').mouseup( function() {
        alert('Got here');
        SelObj = window.getSelection();
        Range = SelObj.getRangeAt(0);
        if (SelObj.anchorNode == SelObj.focusNode){
            alert('executing same node branch');
            string = SelObj.toString();
            alert(string)
        }
        else{
            alert('executing multiple node branch');
            //code...
        }
    });
});
​

关于javascript - jQuery .click 不会触发跨越多个元素的用户选择事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856146/

相关文章:

javascript - 当用户后退和上一个按钮时如何刷新下拉菜单

javascript - Javascript/jQuery/Microsoft-ajax 混合中的双重加载问题

javascript - 检测 jqGrid 单元格中的复选框事件

javascript - D3 转换循环抛出 Uncaught TypeError : t. call is not a function

javascript - cytoscape 通过按钮将图形保存为图像

javascript - 无法从 angularjs 调用 JavaScript 原型(prototype)函数

javascript - 为什么我收到 "Uncaught TypeError: Cannot read property ' body' of undefined”?

javascript - 预加载 Jquery 悬停图像

javascript - 在 Bootstrap 中向工具提示内部添加描述

javascript - jquery/javascript - 如何使用 if 语句 "undo"点击事件?