0

我无法在包含大量 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 抓取的另外两个进行更改。如何更改该字符串值?这甚至可能吗?

任何帮助将不胜感激!

4

3 回答 3

4

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

var test1 = "…";

等等

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

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

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

document.write(test2);

相当于

document.write(String(test2));

第 15.5.1 节)或

document.write(test2.toString());

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

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

于 2012-07-16T22:40:27.420 回答
0

只需使用正确的引号:

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

或者简单地说:

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

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

于 2012-07-16T22:45:03.230 回答
0

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

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

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

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

试试这个document.write()_

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

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

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

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

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

于 2012-07-16T22:47:48.363 回答