php - JS 改变值,PHP 获取旧值

标签 php javascript

我有一个愚蠢的问题。

根据 div 的可见性,我想设置一个隐藏值

if($('#crewMember').is(':visible')) {
  $('#visibility').attr('value', 'hidden')
} else {
  $('#visibility').attr('value', 'visible')
}

这有效。我已经通过 FireBug 检查过,可以看到 HTML 已更改。

但是当我在表单提交后尝试获取此值时,我得到的是原始值,而不是更改后的值。

echo $_POST['visibility']
//returns default value, not the adjusted valueHow come?

怎么会这样?

编辑 一些示例代码

<html>
    <script type="text/javascript">
       $(document).ready(function() {

    $('#div').click(function() {
      $('#visibility').val('hidden');
      $('#value').html('hidden value: ' + $('#visibility').val());
    });

    $('#value').html('hidden value: ' + $('#visibility').val());
  });

  <body>
        <form method="post">
            <div id="div">
                click this area to change value
            </div>

            <div id="value"> <!-- This div will show the actual value of the hidden field -->
            </div>
            <input type="hidden" id="visibility" name="visibility" value="initial value" />
            <input type="submit" name="button" value="button" />
        </form>
    </body>
</html>

当我提交此表单时,$_POST['visibility'] 始终包含字符串“初始值”。 即使我用 JS 将值更改为“隐藏”;

最佳答案

正如 ManseUK 所说,将 $("").attr('value',...) 更改为 $("").val(...)(有关 .val,请参阅 jQuery documentation)

但是要回答为什么的问题,您需要了解 DOM 对象在 JavaScript 中的工作原理。对于每个元素(div、p、a、img、form、input、任何...),每个元素都是 DOM 中的一个对象。

这里是重要的部分:元素有一个值,而且每个属性也有一个值。在 jQuery 中,当您使用 .attr('value',...) 时,您真正要做的是创建一个名为“value”的属性。但这不会改变元素值,该值保持不变。

在 firebug 中,它将读取 JavaScript 属性并将其分层在元素之上,这解释了为什么它在 firebug 中以这种方式显示。但是,当将数据提交到服务器时,浏览器将不会提交属性值 - 仅提交元素的值(未更改)。但是使用 .val() 将更改 element 值,该值将提交到服务器。

也许这在原始 JavaScript 中比 jQuery 更有意义:

.attr()等效的是:element.setAttribute("value","...");

.val()等效的是:element.value = "...";

你看出区别了吗?在 .attr() 中,您从未更改过值,只更改了属性。

关于php - JS 改变值,PHP 获取旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9225846/

相关文章:

php - 当从 string 转换为 int 导致精度损失时,如何抛出异常?

php - 正则表达式 : get what is outside of the brackets

PHP MySQL 查询其中 x = $variable

php - array_search() 的逆向查找键而不是值

javascript - 获取 ' ng2-ckeditor'中的光标位置

javascript - 停止 iPhone 加载压缩图像

php - html 页面上方的静态消息

javascript - 在 API 请求的客户端应用程序中存储用户 ID

php - 使用 Laravel 在 Docker Mysql 上连接被拒绝

javascript - 未占用空间中的额外元素选择框(HTML/JS/CSS w/Angular.js)