0

私はvar iいくつかのPHPで定義するJSの次の塊を持っています。

<script type="text/javascript">
    var i = <?php echo $photo_count; ?>;
    function updatePreview(){
        var x = document.getElementById('preimage').value;
        var y = document.getElementById('precapt').value;
        var preview = "";
        var special = document.getElementById('special').value;

        i++;
        preview += "<div id='smallbox"+i+"' class='smallbox'><table><tr><td rowspan='2'><img id='picture"+i+"' src='"+x+"' /><br /><input type='button' onclick='removeimg("+i+");' value='delete' /></td><td>URL: <input onchange='updateimg("+i+");' type='text' id='image"+i+"' value='"+x+"'/></td></tr><tr><td>Caption: <input type='text' id='capt"+i+"' value='"+y+"'/></td></tr></table></div><hr />";
        //window.alert(preview);



        //document.getElementById('special').value += "#"+x+"|"+y;
        document.getElementById('preview').innerHTML += preview;
        document.getElementById('preimage').value = "";
        document.getElementById('precapt').value = "";
        //window.alert(document.getElementById('special').value);
    }

    function showSubmit(){
        window.alert("i = "+i);
        document.getElementById('hideImg').style.display = "none";
        document.getElementById('hideTags').style.display = "block";
        while(i>1){
            var img = document.getElementById("image"+i).value;
            var capt = document.getElementById("capt"+i).value;
            if(img.length>3){
                document.getElementById('special').value += "#"+img+"|"+capt;
                window.alert(document.getElementById('special').value);
                window.alert("i = "+i);
                document.getElementById('preview2').innerHTML += "<img class='postpreviewimg' src='"+img+"' />";
            }
            i--;
        }
        document.getElementById('preview').style.display = "none";
    }
</script>

このページのソースでは、PHPがi正しく定義されていることがわかりますが、最初に呼び出されない限り、PHPの値がであるshowSubmit()ことalert(i)が示されています。i1updatePreview()

言い換えると、ページのソースが次のようになっている場合:次に、アラートが必要なときにアラートを出すvar i = 36;関数を呼び出しますshowSubmit()i = 1i = 36

updatePreview()呼び出されるたびiに、36からではなく1から増分します。

i間違って定義していますか?それはグローバル変数を設定する適切な方法ではありませんか?

4

1 に答える 1

4

iグローバル変数として定義しています。したがって、のようなものを使用するページ上のすべてのスクリプトは、i=10この値を変更します。

またi、一般的に使用される変数カウンター名であるため、それを変更するスクリプトが存在する可能性が非常に高くなります。var MyPhotoCount = <?php echo $photo_count; ?>;名前として使用すると、機能する可能性が高くなります。

この他のスクリプトがこのスクリプトの前後に含まれている場合でも、問題が発生する可能性があります。他のスクリプトは、on ready function呼び出す前にトリガーされるまたはその他の遅延を使用している可能性がありますShowSubmit();

グローバル変数は常に一意である必要があります。そして、あなたはまた、それらを使用することが決して良い考えではない理由を見つけました。あなたは彼らの価値を信頼することはできません。

アップデート:

ページにnicEdit.jsを含めており、そのスクリプトには次のコードが含まれています(完全なソースの185行目)。

domLoaded : function() {
    if (arguments.callee.done) return;
    arguments.callee.done = true;
    for (i = 0;i < bkLib.domLoad.length;i++) bkLib.domLoad[i]();
},

そこでi変数が変更されます。

于 2012-12-27T09:01:20.327 に答える