我正在尝试编写一个脚本来“播放”this online keyboard上的某些键,方法是使用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
等
2000
DST
...
9000
一个
未定义
未捕获的TypeError:无法读取null p-ano.html的属性'style':142
8未捕获的TypeError:无法调用方法'click'of null
如您所见,delay
和key_
值完全正确。但是当我执行此操作时,经过一秒钟(即1 st 超时)后,所有键似乎立即播放,然后没有任何反应。
我做错了什么?
P.S。:我看过其他问题,例如this one并搜索了谷歌和其他论坛,但无济于事
答案 0 :(得分: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();
})();
答案 1 :(得分: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 ")
我正在运行mirror并想知道如何自动演奏和弦。
// 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)
}
答案 2 :(得分:0)
我假设您发布的代码正是您正在运行的代码。在这种情况下,三个点是非法的。
keys_ = ['et', 'dst', 'et', 'dst', 'et', 'b', 'dt', 'ct', 'a', ...]
尝试删除它们,如
keys_ = ['et', 'dst', 'et', 'dst', 'et', 'b', 'dt', 'ct', 'a']
另外,作为提示,请尝试编写更清晰的JavaScript。在声明变量之前使用var
。用;
分号结束你的陈述。