【问题标题】:Creating a JavaScript function to change a previously declared variable创建 JavaScript 函数以更改先前声明的变量
【发布时间】:2012-07-16 22:26:12
【问题描述】:

我无法在包含大量 PHP 和 JavaScript 的页面上更改变量。

这部分对我来说很好用:

<script language="javascript" type="text/javascript">
function changebg(my)
{
    document.getElementById("imglayer").style.backgroundImage ='url('+ my.src +')';
    document.getElementById("cropframe").style.backgroundImage ='url('+ my.src +')';
}
var test2 = new String("url('+ my.src +')");
</script>

<img src="../../uploads/595MCoDFyArFFe.jpg" width="50" height="50" onclick="changebg(this)" >
<img src="../../uploads/P6l6J8aqzli6gh.jpg" width="50" height="50" onclick="changebg(this)" >
<img src="../../uploads/stXWS8fL4L3nvs.jpg" width="50" height="50" onclick="changebg(this)" >

稍后调用 div ID。

我的问题是我需要动态更改另一个变量:

<script type="text/javascript">
    var test1 = new String( "<?php $src_name = '" );
    var test2 = new String( "956ENbXjzTlkBo.jpg" );
    var test3 = new String( "'; // modify this, original file?>");" );
    document.write( String( test1, test2, test3 );
</script>

我需要var test2 来更改其他两个被 div ID 抓取的内容。 如何更改该字符串值?这甚至可能吗?

任何帮助将不胜感激!

【问题讨论】:

  • 不能将var test1 = new String("&lt;?php $src_name = '"); 简单地称为var test1 = "&lt;?php $src_name = '";
  • 顺便说一句,不要将对象声明为使用字符串,只需执行var testetc = "string goes here";
  • 你不能随意混合 PHP 和 JS 代码。我不明白你想达到什么目的?
  • 看起来您的第二个 JavaScript sn-p 只执行了一次,即遇到 &lt;script&gt; 标记。因此,即使您动态更改变量test2 的值,一旦执行了document.write,新值也不会产生任何影响。
  • PHP 和 JS 在不同的时间和不同的环境中执行。 PHP是服务器语言,在服务器上执行,然后发送到客户端。在客户端执行 javascript。这些语言应该通信的唯一方式是通过 xml http 请求、websockets 或类似的。

标签: javascript string function variables getelementbyid


【解决方案1】:

首先,这不是 Java(即使在 Java 中你也不需要它)。你不应该使用new String(…);只需使用字符串文字:

var test1 = "…";

等等

第二,字符串是不可变的;您不能更改字符串值/对象;您只能创建和分配一个新字符串。但是,您也可以创建一个用户定义的 Object 实例,该实例具有根据其他值(如变量值)返回值的方法:

var test2 = {
  toString: function () {
    return "foo" + test1 + "bar";
  }
};

document.write() DOM method 将其参数隐式转换为字符串,这是通过调用 hull 对象的 toString()valueOf() 方法来完成的,以先可用者为准(请参阅ECMAScript Language Specification, 5.1 Edition, section 9.8)。所以

document.write(test2);

等价于

document.write(String(test2));

(section 15.5.1) 或

document.write(test2.toString());

它将写入test2的值所引用的对象的toString()方法的返回值。 (对于输出的动态变化,您需要使用其他 DOM 功能,例如符合标准的textContentnodeValue 或专有的innerHTML 属性。)

顺便说一句,String 构造函数只考虑一个参数(见上文),所以new String(x, y, z) 等价于new String(x)。也许您正在寻找连接:new String(x + y + z)。但如果至少有一个操作数是String 类型,x + y + z 就足够了;如果没有,String(x) + y + z"" + x + y + z 有效。

【讨论】:

    【解决方案2】:

    只需使用正确的引号:

    var test2 = new String("url(" + my.src + ")");
    

    或者简单地说:

    var test2 = "url(" + my.src + ")";
    

    但是,您不能通过从 Javascript 编写 php 代码来更改 php 变量。当 Javascript 运行时,php 脚本已经结束。

    【讨论】:

      【解决方案3】:

      首先,您在构建字符串时采用了一种非常奇怪的方式。我认为这样做的目的是,在所有这些结束时,最终得到一个看起来像这样的字符串:

      <?php $src_name = 'X'; // modify this, original file ?>
      

      (这会输出 PHP,您的 Web 服务器不会解释它,但我假设您知道这一点并且出于其他原因输出它。)

      x 是在其他 DOM 元素中可用的一些数据(可能是您的 img 元素之一,因为文件名相似)。如果您想在将来发生一些任意事件后更新已打印到页面的 x 值。您需要给自己一些有形的元素来更新 - 例如,span 元素。

      试试document.write()ing 这个

      document.write("&lt;?php $src_name = '<span id=\"my-element\">X</span>'; // modify this, original file ?&gt;");
      

      请注意,我已将您的 更改为它们的编码等效项。

      然后,您可以稍后使用 JavaScript 更新 span 的内容(见下文)。这不会改变您声明的变量,而是改变页面的内容。由于您只是在最后打印您的字符串(或者,因为 String() 不会像您认为的那样连接给定的字符串),所以在我看来这就是您的意思努力完成。

      document.getElementById("my-element").innerText = "NEW VALUE";
      

      再一次,这并不是更新变量,它本身只是更新你正在打印到页面上的文本。无论如何,这似乎是您的最终目标,如果我错了,请纠正我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-01
        相关资源
        最近更新 更多