2

JavaScript を使用してキーを「クリック」することにより、このオンライン キーボードでいくつかのキーを「再生」するスクリプトを作成しようとしていました。

コード

//sample array to iterate over
var keys_ = ['et', 'dst', 'et', 'dst', 'et', 'b', 'dt', 'ct', 'a', ...];

//handles the clicking only
function playKey(id_) {
    key_ = document.getElementById(id_);
    key_.click(); }

//iterates over the array
function playKeys(keys_) {
    delay = 1000;
    for (i = 0; i < keys_.length; i++) {
        console.log(delay);
        key_ = keys_[i];
        console.log(key_);
        window.setTimeout('playKey(key_)', delay);
        delay += 1000; 
        } 
    }

出力

コンソールは次のエラーをスローします。

1000
et
2000
dst
...
9000 未定義Uncaught TypeError: null
の プロパティ 'style' を読み取れません p-ano.html:142 8 Uncaught TypeError: null のメソッド 'click' を呼び出せません


ご覧のとおり、delayとのkey_値は完全に正しいです。しかし、これを実行すると、1 秒後 (つまり、最初のタイムアウト)、すべてのキーが一度に再生されたように見え、その後何も起こりません。

私は何を間違っていますか?

PS:このような他の質問を見て、Google や他のフォーラムを検索しましたが、役に立ちませんでした

4

3 に答える 3

2

閉鎖について学びます。

window.setTimeout(function(){ playKey(key_); }, delay);

そして、グローバルとローカルに問題があります。varを使用してください!

私がそれを書く方法は

( function() {
    var keys_ = ['et', 'dst', 'et', 'dst', 'et', 'b', 'dt', 'ct', 'a'],
        delay = 250,
        currentIndex = 0,
        playKeys = function () {
            document.getElementById(keys_[currentIndex]).click();        
            currentIndex++;
            if (currentIndex<keys_.length) {
                window.setTimeout(playKeys,delay);
            }    
        };    
    playKeys();
})();
于 2012-09-07T13:54:46.737 に答える
1

は?という組み込み関数が既にありますplaystr()

function playstr(instr) {
    keystr = instr;
    time = 0;
    k = 0;
    for (i = 0; i < keystr.length; i++) {
        setTimeout("playkbd(keystr[k])", time += 50);
        setTimeout("k++", time + 50);
        setTimeout("cb()", time += 200);
    }
}​

「z」、「x」、または「m」を押して実行してみてください。

if (key=="z")
  playstr("wetyuyuju     ujo..juyyuj..uyttfy..yuytft     ujp..o;poko     opoj..uy\
  uju     ujo..juyyuj..uyttfy..yuytft     w e t y u y uoj u ")

if (key=="x")
  playstr("tgtdtgtdtgghhgtdd              tgtdtgtdtgghhgtdd              djjjkjhh\
  jhghjhg djjjkjhhjhghjhg djjjkjhhjhghjhg djjjkjhhjh     tgtdtgtdtgghhgtdd")

if (key=="m")
  playstr("         k j y j k j y f e f e a e f y j k j y j k j y f e f e a e f y\
   j k j y j k j y f e f e a e f y j k j y j k j y f e f e a e f y j ")

ミラーを実行していて、和音を自動演奏する方法を知りたいです。

// F F 1 F A N F A R E 

if (key==".") {
  setTimeout("playstr('u y u yo ok ok ku y g yf   u y u yo ok ok ku y u op ')",100)
}
于 2012-09-07T14:22:08.450 に答える
0

あなたが投稿したコードは、まさにあなたが実行しているものだと思います。この場合、3 つのドットは不正です。

keys_ = ['et', 'dst', 'et', 'dst', 'et', 'b', 'dt', 'ct', 'a', ...]

のようにそれらを削除してみてください

keys_ = ['et', 'dst', 'et', 'dst', 'et', 'b', 'dt', 'ct', 'a']

また、ヒントとして、よりクリーンな JavaScript を作成してみてください。var変数を宣言する前に使用します。;セミコロンでステートメントを終了します。

于 2012-09-07T13:52:54.303 に答える