通过javascript每次点击动态禁用文本选择?

     2023-03-06     204

关键词:

【中文标题】通过javascript每次点击动态禁用文本选择?【英文标题】:Disable text selection dynamically per click via javascript? 【发布时间】:2012-08-12 03:55:42 【问题描述】:

我有一个表格,我添加了一些多项选择功能,其中 shift + click 在第一次单击和第二次单击之间选择行,但最终突出显示行之间的所有文本。

我不想通过 CSS 禁用文本选择,因为这些东西确实需要可选,而不是当我的多选功能触发时 shift + click 时。

这个可以吗?

    var lastChecked;    
    $("#contact_table tr").click(function(e) 
        if (e.target.getAttribute('type') == 'checkbox') 
            return;
        ;  
        if (e.shiftKey && lastChecked) 
            // select between last point and new point
            var tableRows = $("#contact_table tr");
            var newRow = tableRows.index($(this));
            var oldRow = tableRows.index(lastChecked);
            if (oldRow < newRow) 
                newRow = newRow +1;
            
            var sliceRange = [newRow, oldRow].sort();
            var selectedRows = tableRows.slice(sliceRange[0], sliceRange[1])
                .find('input[type=checkbox]').attr('checked', true);
         else 
            var checkbox = $(this).find('input[type=checkbox]');
            var checked = toggleCheckbox(checkbox);
            if (checked) 
                lastChecked = $(this);
                           
        ;
        recalculateSelectedButton();
    );

【问题讨论】:

可以分享一下你的多选功能吗?我认为您应该能够阻止事件处理程序中的默认行为。 @PJH 刚刚添加了它!谢谢:) ***.com/questions/826782/… @JoelPurra 是的,我在帖子中引用了该方法。我很好奇是否有一个 JS 事件可以劫持这种行为,而不是临时动态设置 CSS(我什至不确定这是否可行,因为点击已经开始)。 @YujiTomita:你是对的。我误读了! 【参考方案1】:

您可以使用 javascript 取消选择所有文本;在运行多选逻辑后添加对RemoveSelection() 的调用。

来自http://help.dottoro.com/ljigixkc.php 通过Clear a selection in Firefox

function RemoveSelection () 
    if (window.getSelection)   // all browsers, except IE before version 9
        var selection = window.getSelection ();                                        
        selection.removeAllRanges ();
    
    else 
        if (document.selection.createRange)         // Internet Explorer
            var range = document.selection.createRange ();
            document.selection.empty ();
        
    

【讨论】:

乔尔,你找到了!这非常有效,显然甚至在 IE 上也是如此。谢谢! 终于! Even a blind squirrel finds a nut once in a while =) 非常感谢,嘘!【参考方案2】:

您可以尝试根据选中复选框的数量禁用用户选择。如果有,只需将 CSS 样式 user-select: none;(和前缀版本)添加到 #contact_table

如果您提供 jsfiddle 以及您当前的 javascript 代码和表格,我也会测试代码 - 现在它是原样 ;) 我不确定点击交互将如何与任何取消的事件冒泡一起发挥作用等等。此外,即使选中了复选框,此实现也没有考虑到用户可能想要选择文本(因此它可能不是您要查找的内容)。

$(function() 
    var $contactTable = $("#contact_table"),
        userSelectNoneClass = "user-select-none";

    $contactTable.on("change", ":checkbox", function(e) 
        var numberOfCheckedRows = $("#contact_table :checkbox:checked").length,
            anyCheckedRows = (numberOfCheckedRows > 0);

        if (anyCheckedRows && $contactTable.hasClass(userSelectNoneClass)) 
            $contactTable.addClass(userSelectNoneClass);
         else 
            $contactTable.removeClass(userSelectNoneClass);
        
    );
);
.user-select-none

    /* From https://***.com/questions/826782/css-rule-to-disable-text-selection-highlighting */
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;

编辑:改用更改事件。

【讨论】:

乔尔,感谢您的宝贵时间。谢谢!这是一个好主意,但最好不要采取阻止选择的方式,除非在多次单击期间。我认为如果只选择未选中的框,用户会感到困惑,因为人们一开始很少意识到文本选择。 “为什么这该死的东西不起作用??” @YujiTomita:是的,想到了我实现了代码;)

如何禁用文本选择突出显示

...有CSS标准方法来禁用突出显示效果?我意识到这可以通过JavaScript完成,并且通过谷歌搜索得到了Mozill 查看详情

禁用输入,允许点击文本框

...一必要的验证并禁用键盘输入。这样,唯一可能的输入是通过日期选择器。我唯一的问题是将disabled属 查看详情

禁用文本选择并添加例外

...down=\'returnfalse;\'onselectstart=\'returnfalse;\'是否可以通过使用javascript输入textareas和选择来给出异常?如果是的话,你 查看详情

移动网络 - 禁用长按/点击文本选择

】移动网络-禁用长按/点击文本选择【英文标题】:MobileWeb-Disablelong-touch/tapholdtextselection【发布时间】:2012-06-2913:51:21【问题描述】:我已经看到/听到了有关使用user-select的变体禁用文本选择的所有信息,但这些都不能解决我遇... 查看详情

javascript在网站上禁用(文本)选择(代码片段)

查看详情

如何使用 JavaScript 暂时禁用文本选择?

】如何使用JavaScript暂时禁用文本选择?【英文标题】:HowcanIdisableTextSelectiontemporarilyusingJavaScript?【发布时间】:2010-10-2720:31:11【问题描述】:这是一个有点具体的问题,所以我会直奔主题。我正在为Web应用程序的一部分开发一... 查看详情

Oracle Apex 根据 LOV 选择的值动态启用/禁用文本字段

】OracleApex根据LOV选择的值动态启用/禁用文本字段【英文标题】:OracleApexdynamicallyenable/disabletextfielddependingonLOVselectedvalue【发布时间】:2015-06-1716:42:47【问题描述】:我正在尝试根据LOV选择的值启用/禁用文本字段,但它仅在页面... 查看详情

如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?

】如何在不触摸或点击文本字段的情况下从动态创建的UITextField获取文本(禁用用户交互)?【英文标题】:HowtogettextfromdynamicallycreatedUITextFieldwithouttouchingortappingthetextfield(disableduserinteraction)?【发布时间】:2018-07-0313:43:44【问题... 查看详情

CSS 或 Javascript 禁用从 CTRL + A 突出显示的文本选择

】CSS或Javascript禁用从CTRL+A突出显示的文本选择【英文标题】:CSSorJavascripttodisabletextselectionhighlightingfromCTRL+A【发布时间】:2013-05-1911:59:54【问题描述】:注意:这个问题与HowtodisabletextselectionhighlightingusingCSS?不同在提问之前,我... 查看详情

通过选择器获取动态元素

】通过选择器获取动态元素【英文标题】:GettingaDynamicElementbySelector【发布时间】:2018-12-2917:29:23【问题描述】:我需要点击带有id:#product-6852370-Size的某个网页按钮。我正在与Puppeteer合作,所以通常我会这样做:page.click(\'#product-... 查看详情

UITextView 避免文本选择,但保留可点击的链接

...选择但保持链接可点击。screenshot如果我设置:已解决:通过在UIViewDelegate中添加textViewDidChangeSelecti 查看详情

动态文本视图在带遥控器的 Android 电视中不可选择和可点击

...】:我在listview的行内创建了动态textview,但该textview无法通过电视遥控器聚焦,我想知道textview是否有任何特定属性需要设置?源码在这里:@ 查看详情

如何使用javascript从网页中获取点击或选择的文本? [复制]

】如何使用javascript从网页中获取点击或选择的文本?[复制]【英文标题】:howtogettheclickedorselectedtextfromthewebpagesusingjavascript?[duplicate]【发布时间】:2020-11-0321:38:00【问题描述】:如何使用javascript从网页中获取点击或选择的文本?... 查看详情

禁用结束日期不超过 10 天的日历 javascript

】禁用结束日期不超过10天的日历javascript【英文标题】:Disableenddatenotmorethan10daycalendarjavascript【发布时间】:2019-05-2116:48:03【问题描述】:我想知道禁用结束日期不超过10天。此值选择开始日期动态示例:选择开始日期2018年12月2... 查看详情

在 DocumentViewer 中禁用文本选择

...DocumentViewer的文本选择?这是查看器显示XPS文档然后可以通过鼠标突出显示文本的功能。突出显示的文本也可以复制,但我已经禁用了它。我只是不知道如何禁用突出显示。谢谢!【问题讨论】:【参考方案1】: 查看详情

通过绑定动态创建的带有可点击链接的文本

】通过绑定动态创建的带有可点击链接的文本【英文标题】:Dynamicallycreatedtextwithclickablelinksinitviabinding【发布时间】:2011-04-3015:26:04【问题描述】:我确实想创建一个列表视图,其中包含自己类的许多项目。其中一个属性是可以... 查看详情

点击后通过 JavaScript 动态创建 jQuery Mobile 页面

】点击后通过JavaScript动态创建jQueryMobile页面【英文标题】:DynamicallycreatejQueryMobilepageviaJavaScriptafterclicking【发布时间】:2011-08-2808:49:26【问题描述】:我的jQueryMobile应用由一个index.html页面组成,并且只包含一个带有启动链接的... 查看详情

禁用 Chrome for Android 文本选择弹出窗口

...弹出窗口(附加屏幕截图)就不会出现。有没有办法使用javascript来做,而不是从整体上删除文本选择功能?【问题讨论】:【参 查看详情