javascript - javascript 'if' 语句中使用的 Posted 变量立即消失

标签 javascript php css forms

我在我的页面上运行表单,将数据发布到 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="&nbsp" />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="&nbsp" />
        <a id="716b" href="addtocart.php?jcartRemove[]=1" /><img src="on.png"></a> &nbsp 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';
    }
}

希望这就是您要找的。

编辑:如果你的目标页面是同一个页面,你可以通过让你的 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/

相关文章:

javascript - 为什么 JSLint 使用此代码给我一个 "Unexpected ' .'"错误?

javascript - 同一页面上的多个 Twitter Bootstrap Popover 仅显示第一个内容

php - 无法从 docker 容器运行 Apache/php

php - JSON 格式到 HTML 表格

html - 使用 css 倾斜 div 的顶部而不倾斜文本

javascript - 如何添加幻灯片 6、7、8 ..codepen 脚本

javascript - firebug 控制台不进行提升

php - 检查链接是否有效,如果不能直观地识别它是否已损坏

javascript - 如何使用 javascript 或 jquery 生成 CSS 路径?

html - 仅使用 css 的多种背景颜色