繁体   English   中英

改变价值JS,PHP获得旧价值

[英]Change value JS, PHP getting old value

我有一个愚蠢的问题。

根据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?

怎么会?

编辑 SOme示例代码

<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']始终包含字符串'initial value'。 即使我用JS将值改为'隐藏';

尝试使用val()代替(假设您的visibility元素是输入元素):

if($('#crewMember').is(':visible')) {
  $('#visibility').val('hidden');
} else {
  $('#visibility').val('visible');
}

正如ManseUK所说,将$("").attr('value',...)改为$("").val(...) (参见.val的jQuery文档

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

这是重要的部分: 元素有一个值,但每个属性都有一个值。 在jQuery中,当你使用.attr('value',...) ,你真正在做的是创建一个名为'value'的属性 但这不会改变元素值,它保持不变。

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

也许这会在原始JavaScript中更有意义,而不是jQuery:

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

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

你看得到差别吗? .attr()您从未更改过值,只更改了属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM