繁体   English   中英

专注于元素,然后导致keydown或keyup空间事件

[英]focus on element and then cause a keydown or keyup space event

我目前正在使用Chrome最新版本。 我有以下简单的html代码:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<html>
<input id="inputfield" type = "textfield">
</html>
</body>
</html>

然后使用javascript,我首先尝试设置确定字段的文本,然后将其聚焦,然后按下空格键。

textbox = document.getElementById("inputfield")
textbox.value = "word";

  var evt = document.createEvent("KeyboardEvent");
evt.initKeyboardEvent(
                   "keyup",
                    true, 
                    true, 
                    window, 
                    false, 
                    false, 
                    false, 
                    false,
                    32, 
                    0 
);

textbox.focus();
textbox.dispatchEvent(evt);

但是没有焦点发生,最后一行只是返回true; 我正在通过Chrome控制台执行代码,我不知道这是否会有所作为。

谢谢

您的标记不正确, html标记未出现在正文中。

应该是这样的:

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <input id="inputfield" type = "textfield">
    </body>
</html>

然后,就像@FAngel所说的那样,您不能以这种方式更改输入字段的值,必须将其文本设置为所需的任何值。

您只需触发一个事件。 但是它不会更改值,“单词”也不会变成“单词”。 不知道为什么它不能从控制台运行,但是可能是您缺少重要的东西。 可能是因为var(我已经几次注意到这个问题了)。 尝试更改var evt = document.createEvent("KeyboardEvent"); 简单地evt = document.createEvent("KeyboardEvent");

我在Firefox 12.0上收到“ TypeError:evt.initKeyboardEvent不是函数”

这是因为在Firefox中,该函数称为initKeyEvent。 这是一个支持firefox和google chrome的代码:

textbox = document.getElementById("inputfield")
textbox.value = "word";

  var evt = document.createEvent("KeyboardEvent");

  var keyEventFunction = (evt.initKeyboardEvent ? "initKeyboardEvent" : "initKeyEvent");

evt[keyEventFunction](
                   "keyup",
                    true, 
                    true, 
                    window, 
                    false, 
                    false, 
                    false, 
                    false,
                    32, 
                    0 
);

textbox.focus();
textbox.dispatchEvent(evt);

和演示: http : //jsfiddle.net/Y674s/2/

UPD:

当您在控制台中运行代码时,焦点设置为您的字段,但是您只能看到它。 要看到这一点,请像这样修改您的输入HTML:

<input id="inputfield" type = "textfield" onblur="alert('focus was in textfield')">

onblur事件仅在某些领域被聚焦但后来的焦点转移到其他地方的情况下才发生。 现在,在控制台中运行代码,然后单击页面正文中的某个位置。 您将看到该警报出现。 如果仅打开页面而不运行该代码,则不会出现aler。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM