php - 神秘的 JavaScript 变量变化

标签 php javascript variables global

我有以下 JS block ,我用一些 PHP 定义了 var i

<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,但在 showSubmit() 的第一行中,我 alert(i) 它显示 i 的值为 1,除非首先调用 updatePreview()

换句话说..如果页面源代码如下所示: var i = 36; 然后我调用函数 showSubmit() 它会提醒 i = 1 当它应该提醒 i = 36

每次调用 updatePreview() 时,i 都会从 1 开始递增,而不是从 36 开始。

我是否错误地定义了i?这不是设置全局变量的正确方法吗?

最佳答案

您正在定义i作为全局变量。因此,页面上的每个脚本都使用类似 i=10 的内容。会改变这个值。

i开始是一个常用的变量计数器名称,很可能有一个脚本可以更改它。如果您使用var MyPhotoCount = <?php echo $photo_count; ?>;顾名思义,它更有可能发挥作用。

即使在此脚本之前或之后包含其他脚本,也可能会导致问题。另一个脚本可能使用 on ready function或在您调用 ShowSubmit(); 之前触发的任何其他延迟

全局变量应该始终是唯一的。而且您还刚刚找到了为什么使用它们从来都不是一个好主意的原因。你不能相信它们的值(value)。

更新:

您在页面上包含 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 变量在那里发生了变化。

关于php - 神秘的 JavaScript 变量变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14051917/

相关文章:

php - youtube 怎么会有这样的 URL?

php - 调整 mysql/php 代码以补偿服务器时区

php - PHP 中的 AWS Cloudfront SetCookie

php - 确定 mysql 值是否在同一行

javascript - 如何在 Angular js中打开bootstrap datepicker?

javascript - 使用 setInterval 更新按钮上的文本

javascript - 为 document.getElementById 和 document.createElement 使用变量

variables - 如何从 terraform variable.tf 文件中的另一个变量创建一个变量?

python - Python 类声明中的变量用法

java - Eclipse JFrame 错误