【发布时间】:2014-08-19 16:42:04
【问题描述】:
我一直在尝试创建一个高级文本输入,用户可以在其中编写主题标签。 输入是一个内容可编辑设置为 true 的 div,主题标签应该是子节点,因为我允许用户在主题标签内放置空间。
我的问题是,在某些浏览器上,当用户键入时,我无法将焦点设置在主题标签的子节点上。在 Chrome/Linux 和 Safari/OSX 上似乎运行良好,但在 Firefox 和 Chrome/OSX 上设置焦点似乎不起作用。 (我还没到 Windows。)
var $elComposer = $('#composer');
var InsertTagPair = function (tagtype) {
var newTag = document.createElement (tagtype);
$(newTag).attr ('contenteditable', 'true');
$(newTag).attr ('class', 'tag');
$elComposer.off ('keypress');
if (window.getSelection) {
var selection = window.getSelection();
if (selection.getRangeAt && selection.rangeCount) {
var range = selection.getRangeAt (0);
range.deleteContents ();
range.insertNode (newTag);
range.selectNodeContents (newTag);
range.collapse (false);
selection.removeAllRanges ();
selection.addRange (range);
};
};
newTag.focus ();
return newTag;
};
var ComposerOnKeyPressed = function (event) {
if (event.charCode == 35) { // #
var contextTag = InsertTagPair ('span');
$elComposer.attr ('contenteditable', 'false');
return false;
};
return event;
};
$elComposer.on ('keypress', ComposerOnKeyPressed);
上面的代码是不起作用的基本部分。在这里查看它的实际效果:
JSFiddle - http://jsfiddle.net/cja963ym/1/
要查看更完整、更有意义的作曲家版本,请参阅以下内容:
JSFiddle - http://jsfiddle.net/g_borgulya/ur6zk32s/15/
症状:在 Firefox 上,如果您输入可编辑的 div 并按“#”,您必须手动单击它或使用 tab 移动焦点才能编辑主题标签,而在其他平台上它会获得焦点当我在元素上调用 newTag.focus() 时。
我不知道如何继续,甚至不知道如何调试这个问题。
【问题讨论】:
标签: javascript jquery html firefox