jQuery在span中看不到';s用php echo显示


jQuery not seeing string in span that's displayed with php echo

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

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

编辑#2:我现在使用的是@Alex Andrei的js代码。但问题似乎是由于使用_GET(我在这里的知识有限)。作为测试,我用<?php $itemdesc = 'Product A';>替换了<?php $itemdesc=$_GET["itemdesc"]; >,然后回显它,javascript就工作了。

编辑3:已解决。由于空白字符,字符串没有100%匹配。

<?php $itemdesc=$_GET["itemdesc"]; ?>  //can be "Product A" or "Product B"
<html>
<style>
 #desc-a, #desc-b {display: none;}
</style>
You purchased: <span id="description"><?php echo $itemdesc ?></span> and 
    <span id="desc-a">you'll get it in 1 day.</span>
    <span id="desc-b">you'll get it in 5 days.</span>
<script>
    $(document).ready(function () {
    debugger;
    var c = document.getElementById("description").innerHTML;
    if (document.getElementById("description").innerHTML == "Product A") {
        document.getElementById("desc-a").style.display = "inline";
    if (document.getElementById("description").innerHTML == "Product B") {
        document.getElementById("desc-b").style.display = "inline";
    }
    });
</script>

此不需要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>

此外,您的if块未正确打开/关闭。

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

你绝对应该考虑@SurralDreams在他的回答中提出的方法,因为它消除了许多安全问题。

这里有一个更简单的方法来处理这个页面:

<?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。但是请不要直接在页面中插入$_GET值。这会使您的页面打开,从而受到恶意链接的攻击。

试图让你的脚本工作时,我发现短标签<? ?>

如果您包含jquery ,其中不起作用,但您的javascript运行良好

当然。

因此,您可以在php.ini 中启用短标记short_open_tag=On

或使用<?php ?>

$(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";
   }
});

您可能存在竞争条件。可以在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操作。

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