我的任务是创建一系列跨度文本元素,这将允许我在遍历 html 文档时提供制表操作。
在我的解决方案中,我有一些 ajax 更新,并且某些 html 元素可以编辑,而其他的则不能。但是,我在我提供的示例中删除了这些细节。
所以操作方式是当我点击一个span元素时,它会变成一个输入框。我想要的是当我按下 TAB 键时,它应该转到具有“test”类的下一个元素跨度,将下一个元素切换到输入框并将旧输入框更改为跨度。
但是,我还希望每当我在任何输入框上时,它都会自动将我切换到一个跨度,而无需任何遍历。
我面临的问题是我可以让一个或另一个工作,但不能同时工作。
- 当我将模糊功能设置为工作时。我可以将 span 元素交换为输入,当我将注意力移出它时,它会恢复正常,但制表符不起作用。
- 当我让选项卡功能工作时,我可以通过一系列跨度元素进行选项卡,但是当我尝试通过单击正文文档来关注输入时,它不会将输入框更改回跨度。
根本问题是因为这两个操作都会触发focusout
事件。但是当我点击时,它keydown
首先执行事件,然后触发focusout
事件。
我在这里附上一个 jsfiddle:http: //jsfiddle.net/QcGag/1/
注意在代码中,我使用了一个canTab
标志。如果您按原样保留代码,它可以正确地通过标签。因此,单击Test 1并继续tab按键。它将跳过“测试 3”。现在,在模糊功能将起作用但制表符被禁用//
之前删除。cellElem.canTab = false;
我需要让两者都工作。
我会接受有关设计或编码结构的建议。
这是代码的最新更新:http: //jsfiddle.net/QcGag/3/
这实际上适用于 IE 7-9,但不适用于 Google Chrome;错误出现为:
“未捕获的错误:NOT_FOUND_ERR:DOM 异常 8”
我所做的是将下一个元素设置为,""
并在 的 if 语句中检查下一个元素的长度(是否存在)canTraverse()
。注意:我将save()
第一个代码示例中的名称更改为canTraverse()
.
张贴在 jQuery 论坛: http ://bugs.jquery.com/ticket/12505
发布在谷歌铬: http ://code.google.com/p/chromium/issues/detail?id=147759