PHP $_POST 在输入上使用 jquery val() 后为空


PHP $_POST is empty after using jquery val() on input

我想检查出生年份的输入值。我已经发现,如果我使用 jquery 函数 val() 来获取此输入的值,则此输入的 php 帖子将为空。它在不使用 val() 的情况下工作正常。在这里,您可以看到代码的重要部分。这不是形式的基本能力,但检查是否没有写任何不恰当或任何错误输入的内容会很有用。

谢谢你的帮助。

<?php
if (!empty($_POST['rn']) && isset($_POST['rn'])){
    // proceed
} else {
    echo "You haven't filled all inputs";
}
?>
<script>
$("#kontrolaButton").click(function(){
    var rok = parseInt($("#rok_nar").val(),10);
    if (rok > 1900 && rok < 2016) {
        $("#odeslatButton").trigger('click');
    };
});
</script>
<form accept-charset="utf-8" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" class="send_form">
<input class="bold" id="rok_nar" type="text" name="rn" placeholder="Rok narození"/>
<input type="button" value="Odeslat" name="kontrola" id="kontrolaButton" /> 
<input type="submit" value="Odeslat" name="odeslat" id="odeslatButton" style="visibility: hidden;" />
</form>

更新:我可能已经发现了问题。我没有在这里写它,因为我不认为这是一个问题。我的脚本如下所示:

$("#kontrolaButton").click(function(){
    var rok = parseInt($("#rok_nar").val(),10);
    alert(rok);
    if (rok > 1900 && rok < 2016) {
        $("#odeslatButton").trigger('click');
    };
});

删除警报后,代码有效:/有趣。。。

看起来您试图在加载之前访问 dom 中的输入。 我没有看到准备好的文档。 您需要将脚本粘贴到准备好的文档中,以便延迟到dom完全解析,或者将逻辑移动到页面底部,以便在您尝试查找元素时元素存在。

您应该将脚本移动到 HTML 正文的末尾,以便在 kontrolaButton 元素位于 DOM 中时执行。

请注意,您为关闭alert(rok);而发出的鼠标向下/向上或按键/释放可能会干扰表单的提交。例如,我可以重现这样的问题:我按 ESC 键关闭警报,尽管表单提交了数据,但下一页没有呈现;这只是一张白纸。这可能非常依赖于浏览器,但在我的设置中,ESC 键显然会中断页面的呈现。

可能还有其他这样的副作用,当然,如果你的页面上有其他 Javascript 代码来响应这些键或鼠标事件。