SVG在Firefox和IE11中无法正确接收焦点的元素
我已经创造了这个小提琴,所以你可以为自己看到问题。 如果你给一个元素焦点,任何相关的事件都会触发,但焦点实际上并不在元素上,或者至少它似乎不像tabbing会带你回到元素。 在Chrome上完美运行。
这是jQuery:
$squares = $('a'); $squares.on('focus', function() { $(this).find('rect').attr('opacity', '.2'); }).on('blur', function() { $(this).find('rect').attr('opacity', '1'); }); $squares.eq(2).focus();
这里是小提琴: http : //jsfiddle.net/bigwigal/n3bf8ofe/2/
任何建议将不胜感激。 谢谢。
问题是基本的DOM方法.focus()
和.blur()
(由JQuery方法在内部使用)没有在表示SVG中元素的SVGAnchorElement接口上定义。
DOM Level 2规范仅定义特定类型的HTML元素(表单元素和锚点)的模糊和焦点方法。
HTML 5规范正在为HTMLElement接口定义这些方法 ,因此HTML命名空间中的任何元素都可以接受键盘焦点。
但是,SVG规范(自HTML5之前的版本以来未进行过大幅更新)不会定义这些方法。
我个人很乐意支持在一般Element
接口上定义焦点/模糊方法的建议。 我怀疑这是Chrome在内部实现它的方式。 如果没有发生,希望SVG2规范中会有特定的内容。
它仍然无法解释为什么focus()
方法在你的小提琴中触发一个焦点事件,从而引发一个样式改变。 我怀疑JQuery正在捕捉无这样的function错误和直接创建Focus事件的后备,但它对整个文档没有正确的影响。
相比之下,当你试图调用(基本的DOM版本) focus()
时,你的小提琴的香草Javascript版本就会出错;这就是我意识到问题是函数不存在的问题!):
http://jsfiddle.net/n3bf8ofe/5/
var squares = document.getElementsByTagName('a'); for (var i=0,max=squares.length; i
不幸的是,我还没有找到解决方法。 Document.activeElement
属性是只读的。 (有趣的是,它不是W3 DOM规范的一部分 ,只是HTML5规范的一部分 。)
实际上没有任何其他标准方法可以控制脚本的焦点。 甚至在SVG中也忽略了tabIndex
属性(我希望在SVG 2中看到另一个特性 - 或者基本的DOM - 规范!)。
PS,你可能对这个Q&A感兴趣,关于SVGStyleElement没有HTMLStyleElement的所有function的类似问题 。
- Twitter Bootstrap Js(标签,弹出窗口,下拉菜单)在Drupal中不起作用
- 当用户点击彼此靠近的链接时,如何防止Android Chrome放大镜(链接预览)?
- Jquery – 选择随机JSON对象
- JQuery DataTables – AJAX Reloading不工作
- 如何播放(流而不是下载)使用Blobstore API存储在GCS中的video文件
- 使用Jquery $ .get()逐行检索文本文件
- audio_tag为不同的按钮播放相同的文件
- 使用jquery加载xml文件,编辑它,然后用php再次保存到服务器
- jqGrid页脚单元格从主网格中的单元格“inheritance”CSS