jQuery在';用php echo显示

jQuery在';用php echo显示,php,jquery,echo,getelementbyid,document-ready,Php,Jquery,Echo,Getelementbyid,Document Ready,我的php页面看起来像这样(脚本上方加载了jQuery)。当span id=“description”中的文本是普通文本时,它可以正常工作(用于#desc-*的css从display:none更改为display:inline),但是当使用php echo函数(它从URL检索$itemdesc的字符串值;该值可以是“Product A”或“Product B”)来显示字符串时,代码不起作用。我原以为ready函数可以让PHP/DOM加载,并且可以工作,但没有 编辑:我删除了php短标记,但没有帮

我的php页面看起来像这样(脚本上方加载了jQuery)。当span id=“description”中的文本是普通文本时,它可以正常工作(用于#desc-*的css从display:none更改为display:inline),但是当使用php echo函数(它从URL检索$itemdesc的字符串值;该值可以是“Product A”或“Product B”)来显示字符串时,代码不起作用。我原以为ready函数可以让PHP/DOM加载,并且可以工作,但没有

编辑:我删除了php短标记,但没有帮助。(echo功能在使用或不使用短标记的情况下工作)

编辑2:我现在正在使用@Alex Andrei的js代码。但问题似乎是由于使用了_GET(我在这里的知识有限)。作为测试,我替换了
//可以是“产品a”或“产品B”
#描述-a,#描述-b{显示:无;}
您购买了:和
你会在一天内得到它。
你将在5天内得到它。
$(文档).ready(函数(){
调试器;
var c=document.getElementById(“description”).innerHTML;
if(document.getElementById(“description”).innerHTML==“产品A”){
document.getElementById(“desc-a”).style.display=“inline”;
if(document.getElementById(“description”).innerHTML==“产品B”){
document.getElementById(“desc-b”).style.display=“inline”;
}
});

为了使脚本正常工作,我发现短标记

其中不起作用,但如果包含jquery,javascript工作正常

当然

因此,您可以在php.ini中启用短标记
short\u open\u tag=On


或者使用

您不需要使用
jQuery

请参见下面的示例

<?php

$itemdesc = trim($_GET["itemdesc"]);

?>

<script type="text/javascript">

var desc = document.getElementById("description");

switch(true){

  case desc.innerHTML == 'Product A':
    document.getElementById("desc-a").style.display = "inline";
    break;

  case desc.innerHTML == 'Product B':
    document.getElementById("desc-b").style.display = "inline";
    break;

}
</script>

var desc=document.getElementById(“说明”);
开关(真){
case desc.innerHTML==“产品A”:
document.getElementById(“desc-a”).style.display=“inline”;
打破
case desc.innerHTML==“产品B”:
document.getElementById(“desc-b”).style.display=“inline”;
打破
}
如果块未正确打开/关闭,则您的

更新:
我在
GET
周围添加了
trim
,以消除任何前导或尾随空格,如换行符或空格

您应该明确地考虑在他的回答中提出的“超现实主义”的方法,因为它消除了一些安全问题。

<代码> $(文档)。
$(document).ready(function () {
   var c = document.getElementById("description").innerHTML;

   if (c == "Product A") {
       document.getElementById("desc-a").style.display = "none";
   }  <---  //this was missing btw
   if (c == "Product B") {
      document.getElementById("desc-b").style.display = "inline";
   }
});
var c=document.getElementById(“description”).innerHTML; 如果(c==“产品A”){ document.getElementById(“desc-a”).style.display=“无”;
}这里有一个更简单的方法来访问此页面:

<?php
$itemdesc=$_GET["itemdesc"];

if ($itemsdesc == "Product A") {
    $delay = "1 day"
} elseif ($itemsdesc == "Product B") {
    $delay = "5 days"
} else {
    $delay = "several days"
}
?>  

You purchased: <span id="description"><?php echo $itemdesc ?></span> and 
   you'll get it in <?php echo $delay ?>.

您购买了:和
你会成功的。

完全没有JavaScript。但请不要直接在页面中插入$\u GET值。这会使您的页面受到恶意链接的攻击。

您可能有竞争条件。在document.ready完成后,可能会呈现innerHTML值

您可以设置一个间隔。我使用doTimeout jQuery插件作为间隔来检查c是否有任何值。如果没有,请运行检查,直到有值为止

例如:

$.doTimeout( 100, function(){
  if ( $("#description" ).text() != "") {
    $("#description" ).text() == "Product A" ? $("#desc-a").css("display","inline") : $("#desc-b").css("display","inline");
    return false;
  }
  return true;
});
此间隔每100毫秒运行一次。一旦条件返回true,它将执行DOM操作


也许这不是最优雅的方式。只是想一想。

你收到错误消息了吗?给console.log(c)什么?是否启用了短标记?由于各种原因,这没有意义。首先,您会遇到什么错误?是否启用了PHP短标记?此外,如果使用jQuery,则使用jQuery,而不使用
document.getElementById(“desc-b”).style.display=“inline”首先,PHP是服务器端执行的。这意味着$ITEMDESC值在页面加载时已经是页面的一部分。第二,你直接将一个get值插入到你的页面中。这是一个安全问题——一个链接可以被链接到这个页面,里面有恶意脚本。请考虑清理内容。您在页面中显示的任何值。请尝试在浏览器中检查HTML,以便您可以确切地看到从$\u GET[“itemdesc”]获得的内容。当您在PHP或JavaScript中测试产品名称的值时,匹配需要100%完美。除非脚本位于元素末尾或之后,否则DOM就绪事件是必需的。正确,但根据问题“您如何知道@Jake的服务器上未启用短标记?”您是r我不知道,但正是这个问题阻止了他的初始脚本在我的服务器上运行(以及javascript中缺少的
}
)所以我想他的情况就是这样,但你的问题是,你可以在
$\u GET
中添加
trim
,OP似乎在
GET
值本身与在
php
@AlexAndrei中硬编码字符串之间存在问题-这可能与他的期望值有任何偏差。trim可能有用,也可能没用。可能是大小写、输入错误、unicode字符、空格或其他意外值。
$.doTimeout( 100, function(){
  if ( $("#description" ).text() != "") {
    $("#description" ).text() == "Product A" ? $("#desc-a").css("display","inline") : $("#desc-b").css("display","inline");
    return false;
  }
  return true;
});