防止元素焦点丢失(需要跨浏览器解决方案)
Prevent loss of element focus (Need cross-browser solution)
当用户点击.box
元素时,我使用以下解决方案来防止#content
文本区域的焦点丢失:
// Detect latest element clicked
$(document).mousedown(function(e) {
lastElClicked = $(e.target);
});
// Prevent loss of focus for textarea when clicking on tools
$("#content").on("blur", function(event) {
if (lastElClicked.attr('class') == 'box'){
event.preventDefault();
this.focus();
return false;
}
});
简而言之,按下鼠标保存已单击的目标元素。在#content
文本区域的模糊检查,如果最后一个元素点击是.box
。如果它是防止默认的,重新聚焦#content
文本区域并返回false。
我的解决方案在Chrome下工作完美,但我仍然在Safari和Firefox下失去焦点。我怎样才能使这个工作跨浏览器?
编辑:提供的解决方案的问题是元素实际上失去了焦点,然后重新聚焦。在Chrome与上面的代码,我从来没有真正松散的fucus,这意味着选择的文本保持选中。
edit:
试试这个:
// Detect latest element clicked
$(document).mousedown(function(e) {
window.lastElClicked = $(e.target);
});
// Prevent loss of focus for textarea when clicking on tools
$("#content").on("blur", function(event) {
if (window.lastElClicked.attr('class') == 'box'){
event.preventDefault();
var that=this;
setTimeout(function(){
$(that).trigger('focus');
},200);
window.lastElClicked="";
return false;
}
});
这也是一篇很好的关于这个错误的文章,似乎是Safari的一部分:http://bugs.jquery.com/ticket/7768
或者你可以试试这个:
$('.box').click(function(event){
event.preventDefault();
$('input').each(function(){
$(this).trigger('blur');
});
setTimeout(function(){
$('#content').trigger('focus');
},200);
});
最后我不得不提的是,它仍然失去了对高亮文本的关注,在我看来,在这种情况下,这是一项不可能完成的任务!
相关文章:
- 在IE8和其他带有javascript的浏览器中获取正文类的标准解决方案是什么
- 是否有用于CSS浏览器支持新功能的javascript解决方案
- 是否有跨浏览器的解决方案可以在客户端上创建目录
- 关闭浏览器时使用 ajax 执行查询的解决方案
- 什么是在javascript中检测操作系统,浏览器和版本号的广泛解决方案
- 在不刷新的情况下更改页面 URL - 是否有跨浏览器解决方案
- 寻找跨浏览器解决方案来突出显示选项卡
- 用于禁用/启用滚动的跨浏览器解决方案
- 用于替换 event.layerX 和 event.layerY 使用的跨浏览器解决方案
- 加载多个图像时用于回调的跨浏览器解决方案
- HTML选择元素-自定义默认值?(跨浏览器解决方案)
- 表单外提交按钮的跨浏览器解决方案
- 使用SVG文件的跨浏览器解决方案
- 在页面上打印元素内容的跨浏览器解决方案是什么?
- 防止元素焦点丢失(需要跨浏览器解决方案)
- 用Java Script动态更改段落中的日期(需要跨浏览器解决方案)
- Javascript:用于选择焦点文本框内所有文本的跨浏览器解决方案
- CSS:悬停以强制元素偏移所需的跨浏览器解决方案
- jQuery + Ajax浏览器解决方案非常大的文件
- 无法找到从iFrame打印的跨浏览器解决方案