Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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
Javascript 带有按键的事件控制';选项卡';_Javascript_Html - Fatal编程技术网

Javascript 带有按键的事件控制';选项卡';

Javascript 带有按键的事件控制';选项卡';,javascript,html,Javascript,Html,因此,我有几个输入表单,它们在按顺序填写之前是禁用的,因为根据它们的选择对服务器进行数据调用。我有一个自定义下拉列表,允许我提前打印并单击所需的项目。当我单击该项时,该字段将使用为我的数据模型发生的onblur和onchange事件组合解锁。对我来说,问题是我希望用户能够使用tab。但当我点击tab时,onblur和onchange并没有禁用这个字段,所以它跳过了几个不应该跳过的字段。有没有关于防止tab键跳过禁用元素的建议?我可以用tab键将注意力集中在禁用的元素上吗?这是不可能的,正如文档所

因此,我有几个输入表单,它们在按顺序填写之前是禁用的,因为根据它们的选择对服务器进行数据调用。我有一个自定义下拉列表,允许我提前打印并单击所需的项目。当我单击该项时,该字段将使用为我的数据模型发生的onblur和onchange事件组合解锁。对我来说,问题是我希望用户能够使用tab。但当我点击tab时,onblur和onchange并没有禁用这个字段,所以它跳过了几个不应该跳过的字段。有没有关于防止tab键跳过禁用元素的建议?我可以用tab键将注意力集中在禁用的元素上吗?

这是不可能的,正如文档所说:

如果设置了窗体控件的disabled属性,或者窗体控件是设置了disabled属性的fieldset元素的后代,并且不是该fieldset元素的第一个legend元素子元素(如果有)的后代,则窗体控件将被禁用

禁用的表单控件必须防止在用户交互任务源上排队的任何单击事件在元素上调度

所以你们不能点击那个些元素,也不能聚焦那个些不能点击的元素


因此,如果您需要允许对这些元素进行聚焦,那么唯一的选择就是根本不使用
disabled
属性。您可以改用
.disabled
类并绑定键事件以禁止编辑值。

这是不可能的,正如文档所说:

如果设置了窗体控件的disabled属性,或者窗体控件是设置了disabled属性的fieldset元素的后代,并且不是该fieldset元素的第一个legend元素子元素(如果有)的后代,则窗体控件将被禁用

禁用的表单控件必须防止在用户交互任务源上排队的任何单击事件在元素上调度

所以你们不能点击那个些元素,也不能聚焦那个些不能点击的元素


因此,如果您需要允许对这些元素进行聚焦,那么唯一的选择就是根本不使用
disabled
属性。您可以改为使用
.disabled
类并绑定关键事件以禁止编辑值。

假设您愿意临时启用禁用的元素(从而使其可写),可以通过检查是否具有来完成此操作。如果是这样,您可以在
keydown
返回
true
之前将此属性更改为
false
,这样
keydup
将标记为禁用的元素

此外,您可以设置一个新属性
wasdabled
,然后使用
$(this)[0]
进行检查。如果该元素具有此类,则可以再次禁用该元素后将其重新禁用

这可以在以下jQuery示例中看到:

$('input')。打开('keydown',函数(e){
如果(e.keyCode==9){
if($(this).next()[0].hasAttribute('disabled')){
$(this.next().attr('disabled',false);
$(this.next().attr('wasdisabled',true);
}
if($(this)[0].hasAttribute('wasdisabled')){
$(this.attr('disabled',true);
}
}
});

假设您愿意临时启用禁用的元素(从而使其可写),可以通过检查是否具有来完成此操作。如果是这样,您可以在
keydown
返回
true
之前将此属性更改为
false
,这样
keydup
将标记为禁用的元素

此外,您可以设置一个新属性
wasdabled
,然后使用
$(this)[0]
进行检查。如果该元素具有此类,则可以再次禁用该元素后将其重新禁用

这可以在以下jQuery示例中看到:

$('input')。打开('keydown',函数(e){
如果(e.keyCode==9){
if($(this).next()[0].hasAttribute('disabled')){
$(this.next().attr('disabled',false);
$(this.next().attr('wasdisabled',true);
}
if($(this)[0].hasAttribute('wasdisabled')){
$(this.attr('disabled',true);
}
}
});


我最终将其切换为只读属性。readonly允许我对其进行制表和聚焦,但在模糊和更改完成之前无法键入它。

我最终将其切换为只读属性。readonly允许我对其进行制表并对其进行聚焦,而在模糊和更改完成之前,我无法键入它。

我认为您无法对这样的禁用元素进行聚焦。但是也许你可以通过创建一个“禁用的”css类来解决这个问题,而不是实际上禁用它。对用户来说,它看起来是禁用的,但是选项卡仍然可以工作。顺便说一句,你的问题有点让人困惑。一个代码示例会很有帮助。我认为你不能专注于这样一个禁用的元素。但是也许你可以通过创建一个“禁用的”css类来解决这个问题,而不是实际上禁用它。对用户来说,它看起来是禁用的,但是选项卡仍然可以工作。顺便说一句,你的问题有点让人困惑。一个代码示例会很有帮助。是的,但您仍然可以编写该元素,这可能不是OP所要求的。我首先误读了你的答案,以为一旦你点击它,你会再次禁用它,但是你会失去焦点,对吗?是的,不幸的是,如果你在当前焦点时禁用它,你会失去焦点。然而,我已经扩展了答案,在关闭它后再次禁用它,这可能是你能得到的最接近的结果。无法在任何禁用点单击该元素,只能通过上一个元素的选项卡来启用它。是的