我在我的页面上运行表单,将数据发布到 php 文件,这会导致发布的元素出现在购物车中:
<form method="post"><fieldset>
<input type="hidden" name="jcartToken" value="<?php echo $_SESSION['jcartToken'];?>" />
<input type="hidden" name="my-item-name" value="is716" />
<input type="hidden" name="my-item-price" value="10" />
<input id="716" type="submit" name="my-add-button" value=" " />is716</input>
</fieldset></form>
然后,我在页面底部运行了一个脚本,该脚本实质上是切换控件,以便根据之前的选择,进一步的选择变得清晰:
if (name == 'is716') {
document.getElementById('716b').style.display = 'none';
document.getElementById('716c').style.display = 'inline';
}else{
document.getElementById('716b').style.display = 'none';
document.getElementById('716c').style.display = 'inline';}
问题是上面脚本的 if 语句,即 name == 'is716' 显然只在您单击提交时才变为真。 css 将更改并闪烁一秒钟,表明该语句确实有效,然后它就会消失。我可以通过添加“return false”来保留更改,但这会阻止提交表单和更新数据,这完全没有捕获要点。有没有一种方法既可以提交数据又可以具有“stick”值?
我如何才能使此更改持续到声明再次更改?
编辑: 这是页面的代码:
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>jCart - Free Ajax/PHP shopping cart</title>
<link rel="stylesheet" type="text/css" media="screen, projection" href="style.css" />
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" media="screen, projection" href="jcart/css/jcart.css" />
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'> </script>
<style type="text/css">
input.add {
background-image: url('off.png');
width: 12px;
height: 12px;
border: 0;
cursor: pointer;
}
</style>
</head>
<body>
<div id="wrapper">
<div id="sidebar">
<div id="jcart"><?php $jcart->display_cart();?></div>
</div>
<div id="content">
<form method="post"><fieldset>
<input type="hidden" name="jcartToken" value="<?php echo $_SESSION['jcartToken'];?>" />
<input type="hidden" name="my-item-id" value="1" />
<input type="hidden" name="my-item-name" value="is716" />
<input type="hidden" name="my-item-price" value="5000" />
<input type="hidden" name="my-item-partn" value="716" />
<input type="hidden" name="my-item-qty" value="1" size="3" />
<input id="716a" type="submit" name="my-add-button" class="add" value=" " />
<a id="716b" href="addtocart.php?jcartRemove[]=1" /><img src="on.png"></a>   Apples $5<br>
<br></fieldset></form>
<div class="clear"></div>
<?php
//echo '<pre>';
//var_dump($_SESSION['jcart']);
//echo '</pre>';
?>
</div>
<div class="clear"></div>
</div>
<script type='text/javascript'>
$(document).ready(function() {
$('input[name=my-add-button]').change(function(){
$('form').submit();
});
});
</script>
<script type="text/javascript">
$('#720').click(function() {
$('#720click').click();
});
</script>
<script type='text/javascript'>
window.onload = function() {
var myItemName = <?php echo (isset($_POST["my-item-name"])? $_POST["my-item-name"] : ""); ?>;
if (myItemName == "is716") {
document.getElementById('716a').style.display = 'none';
document.getElementById('716b').style.display = 'inline';
}
}
推送到另一个页面:jcart.php
最佳答案
正如 Suman 所说,您的页面正在提交,因此样式会随页面重新加载,因此在页面 session 中对您的样式所做的任何更改都将被重置。
您的问题的解决方案是在表单的 php 目标页面中设置 session 标志。你可以这样做:
<?php
if (isset($_POST["my-item-name"]) {
session_start();
$_SESSION["my-item-name"] = $_POST["my-item-name"];
}
?>
然后在您的购物车页面上,您会将 session 变量回显到 JavaScript 中,该 JavaScript 将根据需要切换页面的样式:
<?php session_start(); ?>
window.onload = function() {
var myItemName = <?php echo $_SESSION["my-item-name"]; ?>;
if (myItemName == "is716") {
document.getElementById('716b').style.display = 'none';
document.getElementById('716c').style.display = 'inline';
}
}
希望这就是您要找的。p>
编辑:如果你的目标页面是同一个页面,你可以通过让你的 javascript 看起来像这样来简化它:
window.onload = function() {
var myItemName = "<?php echo (isset($_POST["my-item-name"])? $_POST["my-item-name"] : ""); ?>";
if (myItemName == "is716") {
document.getElementById('716b').style.display = 'none';
document.getElementById('716c').style.display = 'inline';
}
}
关于javascript - javascript 'if' 语句中使用的 Posted 变量立即消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31544005/