jquery输入元素取消选择事件?

时间:2012-10-03 22:27:29

标签: javascript jquery html

  

可能重复:
  Unselect what was selected in an input with .select()

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

我在做

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

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

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

尝试模糊事件

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

一旦输入字段失去焦点,这将立即触发。它没有被选中..

答案 1 :(得分: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的解决方案,但我不明白为什么它不起作用。

答案 2 :(得分:2)

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

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

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

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