表单序列化和发布时,JQuery隐藏字段值为null

时间:2016-02-08 23:53:33

标签: javascript jquery post serialization

我有以下html脚本:

<form id="myForm">
...
<input hidden name="myInput" id="myInput">
...
</form>

在某处我为隐藏的输入设置了一个值:

$('#myInput').val('a value here');

然后,我将表单序列化并将其发布到URL:

$.post("my_url_here", $("#myForm").serialize())

在我处理这篇文章的地方,我尝试使用以下方法访问我的隐藏输入值:

$_POST['myInput']

但它显示null(实际为空),当我希望它具有我之前设置的值。如果我明确设置这样的值:

<input hidden name="myInput" id="myInput" value="explicit_value">

它工作正常。知道发生了什么吗?

UPDATE(整个代码,顺序与我的实际代码相同):

<script>

    jQuery( document ).ready(function( $ ) {
           eventHandler(){
             ...
             $('#myInput').val('a value here');
             myPostFunction();
          }
    });

</script>
<form id="myForm">
    ...
    <input hidden name="myInput" id="myInput">
    ...
</form>
<script>

    jQuery( document ).ready(function( $ ) {
           window.myPostFunction= function () {
             alert($("#myForm").serialize());//It shows myField=&otherField=value
             alert($("#myInput").val());// This shows the correct value.
             $.post("my_url_here", $("#myForm").serialize());
          }
    });

</script>

3 个答案:

答案 0 :(得分:0)

这应该有用,但要尝试与我的比较,看看结果:)
你正在使用PHP吗? 尝试创建一个名为sendAjax.php的新php文件并输入:

<!doctype html>
<html>
    <head>
        <title>http://stackoverflow.com/questions/35281545/jquery-hidden-field-value-null-when-form-is-serialized-and-posted</title>
        <script src="jquery-1.7.1.min.js"></script>
    </head>
    <body>
        <form id="myForm">
            <input type="hidden" name="myInput" id="myInput"/>
        </form>
        <script>
            (function(){
                $('#myInput').val('a value here');
                $.post("receiveAjax.php", $("#myForm").serialize(), 
                    function(data){
                        alert(data);
                    });
            })();
        </script>
    </body>
</html>

创建另一个名为receiveAjax.php的新php文件,将其放入与sendAjax.php相同的文件夹中并输入:

<?php
    $data = $_POST;
    var_dump($data);
?>

答案 1 :(得分:0)

“hidden”应该是“type”属性的值,我不知道它是否相关但是尝试替换:

<input hidden name="myInput" id="myInput">

通过:

<input type="hidden" name="myInput" id="myInput">

答案 2 :(得分:0)

好的,谢谢大家的帮助,但最后我找到了解决方案。这个领域的名称并不合适。我只是更改了字段的名称,现在很好。它应该与名称冲突,但我没有意识到它,因为脚本执行正常。在尝试了所有之后,我想改变这个名字......再次,谢谢大家!