所以我给了一个任务来创建一系列跨文本元素,这样我就可以在浏览html文档时提供标签操作。
在我的解决方案中,我有一些ajax更新,并且有一些可以编辑的html元素和其他不可编辑的元素。但是,我在我提供的示例中删除了这些细节。
所以操作模式是当我点击span元素时,它会变为输入框。 我想要的是当我按下TAB键时,它应该使用类“test”转到下一个元素跨度,将下一个元素切换到输入框并将旧输入框更改为跨度。
但是,我还想要操作,无论何时我在任何输入框上,它都会自动将我切换到跨度,而不进行任何遍历。
我面临的问题是,我可以让一个或另一个工作,但不是两个。
潜在的问题是因为两个操作都会触发focusout事件。但是当我选中时,它首先执行keydown事件,然后触发focusout事件。
我在这里附上一个jsfiddle:http://jsfiddle.net/QcGag/1/
注意在代码中,我使用了“canTab”标志。如果您保持代码的原样,它可以正确地标记。因此,单击“测试1”并继续按Tab键。它将跳过“测试3”。现在,在cellElem.canTab = false之前删除'//';然后模糊功能将起作用但禁用标签。我需要让两者都起作用。
我接受有关设计或编码结构的建议。
~~~~开始编辑9/10/2012美国东部时间下午4:22 ~~~~
以下是代码的最新更新: http://jsfiddle.net/QcGag/3/
这实际上适用于IE 7-9,但不适用于Google Chrome;错误出现为“未捕获的错误:NOT_FOUND_ERR:DOM异常8”
我所做的是将下一个元素设置为“”并在canTraverse()的if语句中检查下一个元素的长度(存在)。注意:我将名称从第一个代码示例中的save()更改为canTraverse()。
~~~~结束编辑9/10/2012美国东部时间下午4:22 ~~~~ ~~~~开始编辑9/11/2012美国东部时间上午2:11 ~~~~
发布在jquery论坛: http://bugs.jquery.com/ticket/12505
发表于谷歌铬: http://code.google.com/p/chromium/issues/detail?id=147759
~~~~结束编辑9/11/2012美国东部时间上午2:11 ~~~~
答案 0 :(得分:0)
好的,我找到了一个解决方案:
设计中的关键是将焦点与keydown上的逻辑分开,然后通过弄清楚跨度首先如何转换为输入框(选中它或点击)来处理它。
然后我通过latestCellInfo跟踪动态创建的文本框的位置。这些信息非常有用,因此我可以在任何未来事件中使用该信息,并更好地组织代码。
exit_edit 标记: 这表示输入框是如何输入的:通过选中它或通过单击进入它。因此,当我从前一个文本框中跳出时,它被设置为false,但是当输入被聚焦时,它再次被设置为true。当你集中注意力时,它会检查我们是否可以继续标记。
will_tab 标记: 无论我是否更改了值,这都表示我是否应继续使用Tab键。这在“canTraverse”功能中检查
我仍然在google论坛中保持这个问题,因为我的初始设计中不应该抛出异常。
注意:更改输入和退出中的文本在示例中不起作用。我在这个论坛上的问题专门用于遍历的操作,而不是数据处理。因为我通过ajax返回数据并且在替换old_elem之前它正在替换组件,所以它自动在我这边工作。但如果其他人需要按照我的方式进行遍历,这将是一个良好的开端。