2012-10-03 163 views

回答

3

尝试模糊事件

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

这只要输入字段失去焦点..即火;它是未选中的。

+0

绑定点击也可能有用。 – nrodic

+1

元素失去焦点并不一定意味着选择被清除。例如,如果用户要点击页面外的某个地方(即浏览器url栏),输入字段将失去焦点,但选择仍然存在。 – CupOfTea696

+1

但是可以通过在事件中指定一个条件来解决这个问题..模糊或更改事件可以在这里完成这些事情 –

1

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

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

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

再次,这不是一个完整的解决方案,因为模糊事件可能发生而不清除选择。但这是你能做的最好的。

+0

我上面评论过,但我也会在这里重新发布,因为这很有趣。你知道是否有方法检测选择的内容或字符长度?我可以用它来确定选择是否已被取消。 –

3

因此,经过一番尝试,我找到了一个解决方案。这是我做的。我创建了一个返回从文档中选定文本的功能:

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

在这里,我能够适应使用jQuery的CupOfTea696的解决方案在事件绑定像这样:

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

所以我基本检查所选文本的长度和基于我显示或隐藏上下文菜单。

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

+0

看起来像一个很好的解决方案(: – CupOfTea696