用于循环打破IndexOf

时间:2012-09-01 23:39:28

标签: javascript html for-loop indexof

嗯,我已经脱掉了我的头发,因为我以为我已经完成了这个剧本,但突然又添加了一个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

2 个答案:

答案 0 :(得分: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在上面的评论中所说的就是金钱......有更好的方法来实现你的目标

答案 1 :(得分:1)

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

key[i].toString().indexOf(key[r])