0

我有这个 Javascript 函数:

function capitalizeFL(string) { //takes a string, returns it with first letter capitalized
    return string.charAt(0).toUpperCase() + string.slice(1);
}

一个名为 的文件statuswindow.php,其中包括以下内容:

<?php
    $raceV = "<script>document.write(capitalizeFL(\"".$player->race."\"));</script>";
    $clasV = "<script>document.write(capitalizeFL(\"".$player->clas."\"));</script>";
    echo "You have chosen a " . $raceV. " " .$clasV ."!";
?>

现在是主文件,它使用 ajax 来更新和显示玩家的班级和种族 ( $clas, $race),在使用大写他们的第一个字母之后capitalizeFL

主文件包括以下内容:

$("button").click(function() {
  $("#topMenu").load("statuswindow.php");
});

我希望发生的是,html fromstatuswindow.php将正确显示在主窗口的#topMenudiv 中。

我假设问题是由于document.write覆盖了整个页面。问题是,我如何在不使用的情况下执行以下操作document.write

4

3 回答 3

7

页面加载后不能使用 document.write。它的作用是打开一个新文档并用新内容替换您那里的所有内容。

在这个例子中,甚至不需要使用 document.write。只需使用脚本标签。jQuery 将为您处理脚本标签

您真的应该跳过使用 load 并使用 $.get 或 $.getJSON 并自己处理响应。

让服务器返回一个 JSON 对象。

{
  raceV : "foo",
  clasV : "bar",
  outStr : "You have chosen a {1} {2}!"
}

和 JavaScript 将是

$.getJSON("statuswindow.php", function(data) {
    var outString = data.outStr;
    outString = outString.replace("{1}",capitalizeFL(raceV));
    outString = outString.replace("{2}",capitalizeFL(clasV));
    $("#topMenu").html(outString );
})

真正的问题是:

你为什么不在 PHP 中做所有这些。JavaScript 没有理由这样做。

无需 JavaScript!

<?php
    $raceV = ucfirst($player->race);
    $clasV = ucfirst($player->clas);
    echo "You have chosen a " . $raceV. " " .$clasV ."!";
?>

和 jQuery 负载将是相同的

 $("#topMenu").load("statuswindow.php");
于 2013-05-16T16:14:29.990 回答
3
echo "You have chosen a ".ucFirst($player->race)...

会更有意义

当您使用 $.load 时,您实际上并不希望您加载的页面中有任何脚本,在这种情况下,当 php 具有内置函数时,绝对零理由让 javascript 的第一个字母大写

于 2013-05-16T16:22:24.677 回答
2

我假设问题是由于 document.write 覆盖了整个页面。问题是,我怎样才能在不使用 document.write 的情况下执行以下操作?

因为正是这样document.write做的。

尝试使用innerHTML

例如,如果您想向 中添加内容#topMenu,只需执行以下操作:

document.getElementById('topMenu').innerHTML += capitalizeFL(".$player->race.");
于 2013-05-16T16:17:14.200 回答