可能重复:
Unselect what was selected in an input with .select()jquery input元素取消选择事件?
有没有一种方法,当用户通过JQuery取消选择在输入元素文本来检测?
我做
$('#input').select(function() {...}
当用户选择的文本,以显示与格式选项工具栏,但我一直无法弄清楚如何在用户清除的选择检测。
有什么建议吗?
可能重复:
Unselect what was selected in an input with .select()jquery input元素取消选择事件?
有没有一种方法,当用户通过JQuery取消选择在输入元素文本来检测?
我做
$('#input').select(function() {...}
当用户选择的文本,以显示与格式选项工具栏,但我一直无法弄清楚如何在用户清除的选择检测。
有什么建议吗?
尝试模糊事件
$('#input').on('blur',function() {
if(this.value == ''){
alert('Blur Event - Text box Empty');
//Your code here
}
});
这只要输入字段失去焦点..即火;它是未选中的。
绑定点击也可能有用。 – nrodic
元素失去焦点并不一定意味着选择被清除。例如,如果用户要点击页面外的某个地方(即浏览器url栏),输入字段将失去焦点,但选择仍然存在。 – CupOfTea696
但是可以通过在事件中指定一个条件来解决这个问题..模糊或更改事件可以在这里完成这些事情 –
有没有真正的javascript事件来检测到这一点。这里最好的解决方案是检查模糊,焦点,keydown和mousedown事件。这将是最完整的解决方案,尽管它并不完美。您可以使用.on方法将它同时绑定到所有事件。
$("#input").select(function() {
//do something here
});
$("#input").on("blur focus keydown mousedown", function() {
//do something else here
});
再次,这不是一个完整的解决方案,因为模糊事件可能发生而不清除选择。但这是你能做的最好的。
我上面评论过,但我也会在这里重新发布,因为这很有趣。你知道是否有方法检测选择的内容或字符长度?我可以用它来确定选择是否已被取消。 –
因此,经过一番尝试,我找到了一个解决方案。这是我做的。我创建了一个返回从文档中选定文本的功能:
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的解决方案,但我不明白为什么它不起作用。
看起来像一个很好的解决方案(: – CupOfTea696
请解释“清除选择”。 – David