0

好吧,我把头发扯掉了,因为我以为我已经完成了这个脚本,但是突然添加了一个 for 循环破坏了每个 indexOf,我尝试创建检查,这样控制台就不会崩溃,但遗憾的是没有成功。为“z”或 LevelCheck 使用静态值允许所有 indexOfs 正常工作,但一旦涉及 for 循环,似乎没有一个 indexOfs 希望工作

<script type="text/javascript">
var tempval = new Array();
function Renew(){ //Reset tempval back to val
    for(d=0;d<val.length;d++){
        tempval[d] = val[d];
    }
}
function UpdateLoop(){
    Renew();
    var Levels = document.getElementById("Lvl");
    if(Levels){
        for(z=0; z<=Levels.value; z++){
            Update(z);
        }
    }
}
function Update(LevelCheck){
    for (i=0; i<=key.length; i++){
        if(key[i] != null){
            if ( key[i].indexOf("rate") > -1 ) { //Search through
                for (r=0; r<=key.length; r++){
                    if(key[i].indexOf(key[r]) > -1){ //Finds out which form it should replace
                        var raw=tempval[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
                                var item = document.getElementById(key[y]);
                                if (item) {    //Make it use formula value and then put that result into a value and loop back into function until level reached. If level changed to a lower number, reset to original value and repeat
                                    //raw=raw.replace(key[y],document.getElementById(key[y]).value); //replace this with val[y]
                                    raw=raw.replace(key[y],tempval[y]);
                                }
                            }
                            else
                                break;
                        }
                        if(raw != null){
                            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);
                                        raw=raw.replace("Mov",tempval[x]);
                                        break;
                                    }
                                }
                            }
                            if(raw.indexOf("Lvl") > -1){
                                raw=raw.replace("Lvl",document.getElementById('Lvl').value);
                            }
                            if(raw.indexOf("Exp") > -1){
                                raw=raw.replace("Exp","0");
                            }
                        }
                        if( document.getElementById('Lvl').value == LevelCheck){
                            alert("Input:"+tempval[i]);
                            if(key[i] == "Movrate"){
                                document.getElementById("movespeed").value = eval(raw);
                            }
                            else{
                                var check = document.getElementById(key[r]);
                                if (check){
                                    document.getElementById(key[r]).value = eval(raw);
                                }
                            }
                        }
                        else{
                            tempval[r] = eval(raw);
                        }
                        break; //So it doesn't keep searching
                    }
                }
            }
        }
    }
}
</script>  

Html 部分(这是通过 php 生成的,所以我只是使用了浏览器生成的内容)

<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="" 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="Use Formula" onclick="UpdateLoop();">
            </td>
            <td>
                <input type="submit" value="Save">
            </td>

安慰:

Uncaught TypeError: Object 2 has no method 'indexOf' Monsters.php:62
Update Monsters.php:62
UpdateLoop Monsters.php:39
onclick Monsters.php:28
4

2 回答 2

1

事实证明,平面数字不是字符串,因此为了安全地通过每个值 .toString() 必须存在,但感谢大家的尝试。所以它看起来像:

key[i].toString().indexOf(key[r]) 
于 2012-09-02T08:39:22.237 回答
1

您需要将更新功能更改为以下内容:

function UpdateLoop(){
    var Levels = document.getElementById("Lvl");
    if(Levels){
        for(z=0; z<=Levels.value; z++){
            Renew();
            Update(z);
        }
    }
}

在处理 0 级后,tempval数组具有来自 0 级的值,这会清除val数组中的原始值。

进行此更改解决了我的测试中的问题:http: //jsfiddle.net/jimmym715/xTUND/

哦,MaxArt 在上面的评论中所说的对钱是正确的......有更好的方法来完成你在这里的目标

于 2012-09-02T00:45:26.213 回答