jQuery在';用php echo显示
我的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(我在这里的知识有限)。作为测试,我替换了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短标记,但没有帮
//可以是“产品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;
});