0

我已经格式化了第二个脚本,因此它可以在记事本++中轻松阅读,这是有问题的,第一个只是让你有数组可以使用......无论如何我创建了这个脚本来用预先存在的数字替换单词表格,它通过第一个键“movespeed / 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">
4

2 回答 2

1

逻辑问题,我用 i 代替 r,改成 r 就彻底解决了。人为错误,谢谢大家,尽管你们提供了一些我不知道的有用提示:

var check = document.getElementById(key[r]);
                    if (check){
                        document.getElementById(key[r]).value = eval(raw);
                    }
                }
于 2012-08-29T19:41:41.147 回答
0

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

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

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

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

  4. 在调试器中逐步检查您的代码,并通过观察它逐行执行并检查变量来准确查看失败的原因。

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

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

您可以像这样使该代码更安全:

var item = document.getElementById(key[y]);
if (item) {
    raw=raw.replace(key[y],document.getElementById(key[y]).value);
}
于 2012-08-29T17:47:55.877 回答