1

私は現在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 を返すだけです。私はクロムのコンソールを介してコードを実行していますが、それが違いを生むかどうかはわかりません。

ありがとうございました

4

2 に答える 2

0

マークアップが正しくありhtmlません。タグが本文に表示されません。

これである必要があります:

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

次に、@ FAngelが言ったように、この方法で入力フィールドの値を変更することはできません。テキストを任意の値に設定する必要があります。

于 2013-01-30T15:23:40.683 に答える
0

イベントを発生させるだけです。しかし、それは値を変更しません。「単語」は「単語」にはなりません。コンソールから機能しない理由はわかりませんが、何か重要なものが欠けている可能性があります。おそらくそれは 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/

更新:

コンソールでコードを実行すると、フォーカスはフィールドに設定されますが、それを見ることができます。それを確認するには、入力 HTML を次のように変更します。

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

onblur イベントは、一部のフィールドがフォーカスされたが、後でフォーカスが別の場所に移動した場合にのみ発生します。次に、コンソールでコードを実行し、ページ本文のどこかをクリックします。アラートが表示されることがわかります。ページを開いてそのコードを実行しないと、アラートは表示されません。

于 2013-01-30T15:34:47.387 に答える