jQuery 在用 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 的字符串值;该值可以是 "Product A" 或 "Product B")来显示字符串,代码不起作用.我认为就绪函数会让 PHP / DOM 加载并且它会工作,但是不行。
编辑:我删除了 php 短标签,但这没有帮助。 (echo 函数在有或没有短标签的情况下都有效)。
编辑 #2:我现在正在使用@Alex Andrei 的 js 代码。但问题似乎是由于使用 _GET (我在这里的知识有限)。作为测试,我将 <?php $itemdesc=$_GET["itemdesc"]; >
替换为 <?php $itemdesc = 'Product A';>
然后回显它,并且 javascript 起作用了。
编辑 3:已解决。由于白色 space 个字符,字符串未 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
,那么你的 javascript 工作正常
当然。
因此,您可以在 php.ini
中启用短标签 short_open_tag=On
或使用<?php ?>
你不需要 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
方块 opened/closed 不正确。
更新:
我在 GET
周围添加了一个 trim
以消除任何前导或尾随空格,例如换行符或空格。
您绝对应该考虑@SurrealDreams 在他的回答中提出的方法,因为它消除了许多安全问题。
$(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";
}
});
这是访问此页面的更简单方法:
<?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 值直接插入页面。这使您的页面容易受到恶意 link.
的攻击
您可能存在竞争条件。 innerHTML 值可能会在 document.ready 完成后呈现。
你可以设置一个时间间隔。我使用 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 毫秒 运行 秒。一旦条件 returns 为真,它就会执行 DOM 操作。
也许这不是最优雅的方式。只是一个想法。
我的 php 页面看起来像这样(jQuery 在脚本上方加载)。当 span id="description" 中的文本是普通文本时,它可以正常工作(#desc-* 的 css 从 display:none 更改为 display:inline),但是当使用 php echo 函数(它从 URL 中检索 $itemdesc 的字符串值;该值可以是 "Product A" 或 "Product B")来显示字符串,代码不起作用.我认为就绪函数会让 PHP / DOM 加载并且它会工作,但是不行。
编辑:我删除了 php 短标签,但这没有帮助。 (echo 函数在有或没有短标签的情况下都有效)。
编辑 #2:我现在正在使用@Alex Andrei 的 js 代码。但问题似乎是由于使用 _GET (我在这里的知识有限)。作为测试,我将 <?php $itemdesc=$_GET["itemdesc"]; >
替换为 <?php $itemdesc = 'Product A';>
然后回显它,并且 javascript 起作用了。
编辑 3:已解决。由于白色 space 个字符,字符串未 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
,那么你的 javascript 工作正常当然。
因此,您可以在 php.ini
中启用短标签short_open_tag=On
或使用<?php ?>
你不需要 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
方块 opened/closed 不正确。
更新:
我在 GET
周围添加了一个 trim
以消除任何前导或尾随空格,例如换行符或空格。
您绝对应该考虑@SurrealDreams 在他的回答中提出的方法,因为它消除了许多安全问题。
$(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";
}
});
这是访问此页面的更简单方法:
<?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 值直接插入页面。这使您的页面容易受到恶意 link.
的攻击您可能存在竞争条件。 innerHTML 值可能会在 document.ready 完成后呈现。
你可以设置一个时间间隔。我使用 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 毫秒 运行 秒。一旦条件 returns 为真,它就会执行 DOM 操作。
也许这不是最优雅的方式。只是一个想法。