0

問題のあるメモ帳++で簡単に読み取れるように2番目のスクリプトをフォーマットしました。最初のスクリプトは、操作する配列があるためです...とにかく、このスクリプトを作成して、単語を既存の数字に置き換えました。フォームでは、「movespeed / move」という最初のキーを循環して正常に動作しますが、strとstrrateに到達すると、コメントした場所が文字通り途切れます。onClick //Doesn't get past here? (ボタンです)によって初期化されます。

<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

論理的な問題ですが、rの代わりにiを使用し、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 に答える