功能没有完全循环for循环

时间:2012-08-29 17:36:11

标签: javascript arrays function for-loop indexof

我已经格式化了第二个脚本,因此可以很容易地在notepad ++中读取,这是有问题的,第一个就是让你有数组工作......无论如何我创建了这个脚本来替换前面的单词表格中的现有数字,它可以通过第一个键“movepeed / movrate”进行精细循环,但是当它降低到str和strrate之后,它实际上切断了我评论//Doesn't get past here?的位置 它通过onClick(它是一个按钮)初始化

<script type="text/javascript">
var key = new Array();
var val = new Array();
key.push("movespeed");
val.push("1");
key.push("str");
val.push("4");
key.push("dex");
val.push("3");
key.push("int");
val.push("1");
key.push("will");
val.push("2");
key.push("Movrate");
val.push("Mov+1");
key.push("strrate");
val.push("1+str");
key.push("dexrate");
val.push("1+dex+(str/4)");
key.push("intrate");
val.push("1+int");
key.push("willrate");
val.push("1+will");
</script>

如果上面的脚本乱七八糟,它是由页面生成的。

<script type="text/javascript">
function Update() {
    for (i = 0; i <= key.length; i++) {
        if (key[i].indexOf("rate") > -1) { //Search through
            for (r = 0; r <= key.length; r++) {
                alert("Checked:" + key[r] + " In:" + key[i]);
                if (key[i].indexOf(key[r]) > -1) { //Finds out which form it should replace
                    alert("Passed:" + key[r] + " In:" + key[i]);
                    var raw = val[i];
                    for (y = 0; y <= key.length; y++) {
                        if (key[i] != "movespeed" && key[i] != "Movrate") { //add a check to see if string is not there
                            //alert("string:"+raw);
                            //raw=raw.replace(key[y],Number(document.getElementById(key[y]).value));
                            raw = raw.replace(key[y], document.getElementById(key[y]).value);
                            //alert("Changed:"+key[y]);
                            alert(raw);
                        } else break;
                        alert("hi");
                    } //Doesn't get past here?
                    alert("key[i]:" + key[i] + "Key[r]:" + key[r]);
                    if (raw.indexOf("Mov") > -1) {
                        for (x = 0; x <= key.length; x++) {
                            if (key[x].indexOf("movespeed") > -1) {
                                raw = raw.replace("Mov", document.getElementById(key[x]).value);
                                break;
                            }
                        }
                    }
                    if (raw.indexOf("Lvl") > -1) {
                        raw = raw.replace("Lvl", document.getElementById('Lvl').value);
                    }
                    if (raw.indexOf("Exp") > -1) {
                        raw = raw.replace("Exp", "0");
                        //Change this to exp...you also need to add an exp to the formula system, derpy.
                    }
                    alert(raw);
                    if (key[i] == "Movrate") {
                        document.getElementById("movespeed").value = eval(raw);
                    } else {
                        document.getElementById(key[i]).value = eval(raw);
                    }
                    break; //So it doesn't keep searching
                }
            }
        }
        alert(key[i]);
    }
}
</script> 

Html(它是通过php生成的,但它应该可以正常工作而不必生成)

   Files<br>======================<br>Basic.xml<br>======================<br><table><tbody><tr><td>Creature Name:</td><td><input type="Text" name="CName" value="Thing" size="10%"></td></tr><tr><td>Level:</td><td><input type="Text" id="Lvl" name="level" onchange="alert('hi')" value="1" size="10%"></td></tr><tr><td>movespeed:</td><td><input type="Text" name="movespeed" id="movespeed" value="1" size="10%"></td></tr><tr><td>str:</td><td><input type="Text" name="str" id="str" value="4" size="10%"></td></tr><tr><td>dex:</td><td><input type="Text" name="dex" id="dex" value="3" size="10%"></td></tr><tr><td>int:</td><td><input type="Text" name="int" id="int" value="1" size="10%"></td></tr><tr><td>will:</td><td><input type="Text" name="will" id="will" value="2" size="10%"></td></tr><script type="text/javascript">var key=new Array();var val=new Array();key.push("movespeed");val.push("1");key.push("str");val.push("4");key.push("dex");val.push("3");key.push("int");val.push("1");key.push("will");val.push("2");key.push("Movrate");val.push("Mov+1");key.push("strrate");val.push("1+str");key.push("dexrate");val.push("1+dex+(str/4)");key.push("intrate");val.push("1+int");key.push("willrate");val.push("1+will");</script><tr><td><input type="button" name="button" value="Update" onclick="Update();"></td><td><input type="submit" value="Save"></td><script type="text/javascript">

2 个答案:

答案 0 :(得分:1)

逻辑问题,我使用i代替r,将其更改为r完全修复它。人为错误,感谢大家,虽然你们提供了一些我不知道的有用提示:

var check = document.getElementById(key[r]);
                    if (check){
                        document.getElementById(key[r]).value = eval(raw);
                    }
                }

答案 1 :(得分:0)

由于您没有给我们任何代码,我们可以实际运行/调试,我们所能做的就是提供您必须调查和调试技术的可能性,以帮助您自己解决:

  1. 检查错误控制台或调试控制台是否存在脚本错误。如果您的脚本过早停止,则控制台可能会报告错误。

  2. 将所有循环变量声明为局部变量,因此它们不是隐式全局变量。

  3. alert()来电更改为console.log(),以便您更轻松地跟踪事件的顺序。

  4. 在调试器中逐步执行代码,通过逐行执行并检查变量来查看确切失败的内容。

  5. 如果HTML不包含您期望的ID,则此行可能会导致错误。

    raw=raw.replace(key[y],document.getElementById(key[y]).value);

  6. 你可以像这样使代码更安全:

    var item = document.getElementById(key[y]);
    if (item) {
        raw=raw.replace(key[y],document.getElementById(key[y]).value);
    }