太多的递归
任何人都可以告诉我循环来自哪里?太多的递归
JS:
if (zahl > 1) {
document.getElementById('makroclickm2').innerHTML = data_split[zahlm2];
document.getElementById('makroclickm2').onclick = getwords(zahlm2++);
}
else {
document.getElementById('makroclickm2').innerHTML = "";
document.getElementById('makroclickm2').onclick = "";
}
if (zahl > 0) {
document.getElementById('makroclickm1').innerHTML = data_split[zahlm1];
document.getElementById('makroclickm1').onclick = getwords(zahlm1++);
}
else {
document.getElementById('makroclickm1').innerHTML = "";
document.getElementById('makroclickm1').onclick = "";
}
document.getElementById('makroclick').innerHTML = data_split[zahl];
document.getElementById('makroclick').onclick = getwords(zahl++);
document.getElementById('makroclickp1').innerHTML = data_split[zahlp1];
document.getElementById('makroclickp1').onclick = getwords(zahlp1++);
if (typeof(data_split[zahlp1]) == "undefined") {
document.getElementById('makroclickp1').innerHTML = "";
document.getElementById('makroclickp1').onclick = "";
}
document.getElementById('makroclickp2').innerHTML = data_split[zahlp2];
document.getElementById('makroclickp2').onclick = getwords(zahlp2++);
if (typeof(data_split[zahlp2]) == "undefined") {
document.getElementById('makroclickp2').innerHTML = "";
document.getElementById('makroclickp2').onclick = "";
}
HTML:
<div id="makroclickm2" onclick="" class="makroclick"></div>
<div id="makroclickm1" onclick="" class="makroclick"></div>
<div id="makroclick" onclick="getwords(0);" class="makroclick_center"></div>
<div id="makroclickp1" onclick="getwords(1);" class="makroclick"></div>
<div id="makroclickp2" onclick="getwords(2);" class="makroclick"></div>
(不完整代码) 该函数被调用一次onload事件。
Thx提前!
在这样的台词:
document.getElementById('makroclickm2').onclick = getwords(zahlm2++);
你分配onclick
处理到结果getwords(zahlm2++)
,还没到那个函数本身。
如果我怀疑上面的代码实际上是getwords
函数,那意味着它正在调用自己(递归)。
你应该写:
document.getElementById('makroclickm2').onclick = function() {
getwords(zahlm2++);
}
非常感谢你! – iceteea 2011-04-11 20:25:22
这部分可能会给你一吨的问题:
if (zahl > 1) {
document.getElementById('makroclickm2').innerHTML = data_split[zahlm2];
document.getElementById('makroclickm2').onclick = getwords(zahlm2++);
}
else {
document.getElementById('makroclickm2').innerHTML = "";
document.getElementById('makroclickm2').onclick = "";
}
if (zahl > 0) {
document.getElementById('makroclickm1').innerHTML = data_split[zahlm1];
document.getElementById('makroclickm1').onclick = getwords(zahlm1++);
}
else {
document.getElementById('makroclickm1').innerHTML = "";
document.getElementById('makroclickm1').onclick = "";
}
尝试使用else if
代替if
语句的另一个块。此外,我会使用function(){}
,而不是""
(和getwords()
,作为评估的功能,并且不将其设置为运行,即使被调用时):
if (zahl > 1) {
document.getElementById('makroclickm2').innerHTML = data_split[zahlm2];
document.getElementById('makroclickm2').onclick = function(){getwords(zahlm2++)};
} else if (zahl > 0) {
document.getElementById('makroclickm1').innerHTML = "";
document.getElementById('makroclickm1').onclick = null;
document.getElementById('makroclickm1').innerHTML = data_split[zahlm1];
document.getElementById('makroclickm1').onclick = function(){getwords(zahlm1++)};
} else {
document.getElementById('makroclickm2').innerHTML = "";
document.getElementById('makroclickm2').onclick = null;
}
谢谢,我会编辑它。 – Blender 2011-04-11 20:45:48
这不回答这个问题(甚至尝试)。但是,它可以解决重复代码的过度丰富问题。
// instead of repeating the document.getElementById
// many times over...
document.getElementById('makroclickm2').innerHTML = "";
document.getElementById('makroclickm2').onclick = "";
// get the element once
var elm = document.getElementById('makroclickm2')
// and use it many times over
elm.innerHTML = ""
elm.onclick = null // do not use strings here
这将使代码更容易遵循(请使用适当的变量名称)。
另外,不要使用具有onclick
属性的字符串。改用功能。
快乐编码。
你也可以考虑使用事件注册而不是直接分配。这样你就不必担心后来意外覆盖任何东西。 @参宿一的解决方案看起来会像这样:
var myEl = document.getElementById('makroclickm2');
var myFunc = function() {
getwords(zahlm2++);
}
if (myEl.addEventListener) myEl.addEventListener("click", myFunc, false);
else if (myEl.attachEvent) myEl.attachEvent("onclick", myFunc);
else myEl.onclick = myFunc;
显然,这是相当冗长,但它会很容易写一个快速的辅助函数需要MYEL和myFunc的作为输入,并为您处理一切。
凡\什么是'getwords'功能了解更多有关事件注册? – Adam 2011-04-11 20:22:33
我怀疑上面的代码是'getwords'函数... – Alnitak 2011-04-11 20:24:28