一种方法有效而另一种无效

时间:2019-07-02 21:54:34

标签: javascript

我有一个显示随机图片的.js文件。一种方法是代码可以正常工作,另一种方法则不能工作(不显示任何图片)。以下代码是有效的代码和无效的代码。

此代码有效:

<script> selectdir = 0; var SBcount = 1; </script>

<script src="js/scripts/superbook.js"> </script>

<script> document.write(textSB); textSB = ''; </script>

<script> selectdir = 0; var SBcount = 2; </script>

<script src="js/scripts/superbook.js"> </script>

<script> document.write(textSB); textSB = ''; </script>

<script> selectdir = 0; var SBcount = 3; </script>

<script src="js/scripts/superbook.js"> </script>

<script> document.write(textSB); textSB = ''; </script>

<script> selectdir = 0; var SBcount = 4; </script>

<script src="js/scripts/superbook.js"> </script>

<script> document.write(textSB); textSB = ''; </script>

此代码无效:

<script>
 var SBcount = 0;

 for (SBcharcount = 1; SBcharcount < 5; SBcharcount++)
     {
       var selectdir = 0; var SBcount++;
       document.write('<scr' + 'ipt language="javascript" src="' +      
       loveisdomaindir + 'js/scripts/superbook.js"> <\/script>');
       document.write(textSB); textSB = '';
     }
</script>

此代码在superbook.js中,其中使用SBcount:

switch (SBcount)
       {
         case  1 : SBtop = 225; SBleft = 1275; SBheight = 145;
                   SBwidth = 100; break;

         case  2 : SBtop = 325; SBleft = 1425; SBheight = 145;
                   SBwidth = 100; break;
         case  3 : SBtop = 770; SBleft = 725;  SBheight = 145;
                   SBwidth = 100; break;
         case  4 : SBtop = 625; SBleft = 1300; SBheight = 145;
                   SBwidth = 100; break;
         case  5 : SBtop = 12;  SBleft = 210;  SBheight = 50;
                   SBwidth = 50; break;
         case  6 : SBtop = 345; SBleft = 210;  SBheight = 50;
                   SBwidth = 50; break;
         case  7 : SBtop = 515; SBleft = 210;  SBheight = 50;
                   SBwidth = 50; break;
         default : SBtop = 225; SBleft = 1275; SBheight = 145;
                   SBwidth = 100; break;
   }

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

第一个问题是var SBcount++是语法错误。您不能同时声明变量并对其进行递增。

也就是说,您所采用的方法存在一个根本缺陷。

当您使用document.write写入文档流时,它将在当前脚本元素之后的之后插入脚本元素。

在第一个脚本元素执行完毕之前,它们不会执行。

因此,如果您有一个脚本(a),则该脚本:

  1. 将X设置为1
  2. 生成脚本(b),该脚本写X
  3. 将X设置为2
  4. 生成脚本(c),该脚本编写X

然后事件按此顺序发生:

  1. X为1
  2. X为2
  3. 脚本b写入2
  4. 脚本c写入2

如果您希望第2步在第3步之后进行,那么您需要生成一个完整的脚本元素来更改X的值(就像您在第一个代码示例中手动进行的操作一样)


但是不要那样。将superbook.js替换为函数,然后多次调用(将值作为参数传递)。