7

可能重复:
使用 .select() 取消选择在输入中选择的内容

有没有办法检测用户何时通过 jQuery 取消选择输入元素中的文本?

(注意:我不是在询问是否检测输入元素本身的“未选择”——即模糊——而是关于元素内的文本。)

我在做

$('#input').select(function () {...}

当用户选择文本时显示带有格式选项的工具栏,但我无法弄清楚如何检测用户是否清除了选择。

有什么建议么?

4

3 回答 3

5

尝试模糊事件

$('#input').on('blur',function () {
    if( this.value == ''){
         alert('Blur Event - Text box Empty');
         //Your code here
     }
});

一旦输入字段失去焦点,这将触发..即; 它被取消了..

于 2012-10-03T22:42:33.587 回答
3

所以经过一些实验后,我想出了一个解决方案。这就是我所做的。我创建了一个从文档中返回所选文本的函数:

function getSelectedText() {
    return document.selection.createRangeCollection()[0].text;
}

从这里我能够适应 CupOfTea696 的在事件绑定器上使用 jQuery 的解决方案,如下所示:

$("#input").on("click change keyup select", function (event) {
     if(getSelectedText().length < 1)
          hideAppBar();
     else 
          showAppBar();
 });

所以我基本上检查所选文本的长度,并在此基础上显示或隐藏上下文菜单。

我仍然有模糊问题,但这与在 AppBar 中触发的点击事件有关,而不是上述解决方案。此外,我只在 Win8 上对此进行了测试,因此不确定这是否是一个有效的基于 Web 的解决方案,但我不明白为什么它不起作用。

于 2012-10-04T02:57:22.443 回答
3

没有真正的 javascript 事件可以检测到这一点。这里最好的解决方案是检查模糊、焦点、keydown 和 mousedown 事件。这将是最完整的解决方案,即使它并非完美无缺。您可以使用 .on 方法将它同时绑定到所有事件。

$("#input").select(function() {
    //do something here
});

$("#input").on("blur focus keydown mousedown", function() {
    //do something else here
});​

同样,这不是一个完整的解决方案,因为模糊事件可以在不清除选择的情况下发生。但这是你能做的最好的。

于 2012-10-03T22:59:08.330 回答