Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 通过keydown和focusout冲突切换跨度元素_Jquery_Javascript Events_Traversal - Fatal编程技术网

Jquery 通过keydown和focusout冲突切换跨度元素

Jquery 通过keydown和focusout冲突切换跨度元素,jquery,javascript-events,traversal,Jquery,Javascript Events,Traversal,因此,我被赋予了创建一系列跨文本元素的任务,这将允许我在遍历html文档时提供制表操作 在我的解决方案中,我有一些ajax更新,有些html元素可以编辑,有些则不可以。但是,在我提供的示例中,我删除了这些细节 所以操作模式是,当我点击一个跨度元素时,它会变成一个输入框。 我想要的是,当我点击TAB键时,它应该转到下一个元素span,使用类“test”,将下一个元素切换到输入框,并将旧的输入框更改为span 然而,我也希望无论何时我在任何输入框上,它都能自动将我切换到一个范围,而无需任何遍历 我面

因此,我被赋予了创建一系列跨文本元素的任务,这将允许我在遍历html文档时提供制表操作

在我的解决方案中,我有一些ajax更新,有些html元素可以编辑,有些则不可以。但是,在我提供的示例中,我删除了这些细节

所以操作模式是,当我点击一个跨度元素时,它会变成一个输入框。 我想要的是,当我点击TAB键时,它应该转到下一个元素span,使用类“test”,将下一个元素切换到输入框,并将旧的输入框更改为span

然而,我也希望无论何时我在任何输入框上,它都能自动将我切换到一个范围,而无需任何遍历

我面临的问题是,我可以让其中一个工作,也可以让另一个工作,但不能两者都工作

  • 当我设置模糊功能时。我可以将span元素交换为一个输入,当我将焦点移出它时,它会恢复正常,但制表符不起作用
  • 当制表功能开始工作时,我可以通过一系列span元素进行制表,但是当我试图通过单击body文档来聚焦输入之外的内容时,它不会将输入框更改回span
  • 潜在的问题是因为这两个操作都会触发focusout事件。但是当我tab时,它首先执行keydown事件,然后触发focusout事件

    我在这里附加了一个JSFIDLE:

    注意,在代码中,我使用了“canTab”标志。如果代码保持原样,它可以正确地通过tab键。因此,点击“测试1”并继续点击tab键。它将跳过“测试3”。现在,删除celllem.canTab=false之前的“/”;然后,模糊功能将工作,但选项卡被禁用。我需要让两个人都去工作

    我会接受关于设计或编码结构的建议

    开始编辑2012年10月9日美国东部时间下午4:22~~~~

    以下是代码的最新更新:

    这实际上在IE7-9中起作用,但在谷歌浏览器中不起作用;错误显示为“未捕获错误:未找到错误:DOM异常8”

    我所做的是将下一个元素设置为“”,并在canTraverse()的if语句中检查下一个元素的长度(是否存在)。注意:我将第一个代码示例中的名称从save()更改为canTraverse()

    结束编辑2012年10月9日美国东部时间下午4:22~~~~ 开始编辑2012年11月9日美国东部时间凌晨2:11~~~~

    发布在jquery论坛:

    在google chromium上发布:


    结束编辑美国东部时间2012年11月9日凌晨2点11分~~~

    好的,我想出了一个解决办法:

    设计中的关键是将焦点输出与向下键上的逻辑分离,然后通过计算跨距是如何首先转换到输入框(用标签插入或单击)来处理它

    然后我通过latestCellInfo跟踪动态创建的文本框的位置。这些信息非常有用,因此我可以在将来的任何活动中使用这些信息,并更好地组织代码

    退出\u编辑标志: 这表示输入框是如何输入的:可以通过选项卡进入,也可以通过单击进入。因此,当我从上一个文本框中取出制表符时,它被设置为false,但当一个输入获得焦点时,它再次被设置为true。当你集中注意力时,它会检查我们是否可以继续切换

    将\u选项卡标记: 这意味着无论我是否更改了值,我是否应该继续标记。这在“canTraverse”函数中进行检查

    我仍然在谷歌论坛上讨论这个问题,因为在我最初的设计中不应该抛出这个异常

    注意:更改输入和退出中的文本在示例中不起作用。我在这个论坛上的问题是专门针对遍历操作的,而不是针对数据处理的。它在我这边自动工作,因为我通过ajax返回数据,并且在用旧的元素替换之前,它会替换组件。但是如果其他人需要像我一样穿越,这将是一个好的开始