【问题标题】:Jquery .click won't trigger for user selection events spanning multiple elementsJquery .click 不会触发跨越多个元素的用户选择事件
【发布时间】:2012-08-08 00:45:03
【问题描述】:

我有一个功能(仍在开发中),需要在 div 中捕获用户选择的文本(不是文本区域和输入框,因此 .select 不起作用。)。 Using .click and selection and range objects works great when the selection is contained within a single element in that div but fails to trigger if the user selection spans multiple elements within the div (like multiple p's).

    $('.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...
        }
    });

关于如何在这种情况下触发该事件的任何想法?它仍在相关DivClass 中,所以我很困惑为什么 .click 不会触发。

提前致谢!

【问题讨论】:

    标签: javascript jquery javascript-events


    【解决方案1】:

    使用.mouseup() 而不是.click()。当跨多个段落突出显示文本时,不会在触发 'mousedown' 的同一元素上触发 'mouseup' 事件——这是 '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...
            }
        });
    });
    ​
    

    【讨论】:

    • 没问题,很高兴为您提供帮助 =)。如果这解决了您的问题,请将答案标记为已接受(您可以按下的一侧有一个小复选标记)。
    • 是的,谢谢你,我什至不知道如何接受。我一直在尝试投票,但由于我的分数低,它不会接受。
    【解决方案2】:

    希望使用最新的 jQuery 版本,改用这个:

    $(".relevantDivClass").on("click", function() { /* code */ });

    【讨论】:

    • 为什么会有任何不同? .click 在内部调用 .on
    • 它不... .click().on('click') - api.jquery.com/click 的快捷方式
    • .click 使用最新版本对我不起作用,切换到此版本有效。
    • 正如我所说,它不适合我。我什至确定我的.click 是对的!这行不通,但这样做了。就是这样。
    • 对我不起作用,我正在使用
    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多