PHP不发布由jQuery生成的文本框值

Posted

技术标签:

【中文标题】PHP不发布由jQuery生成的文本框值【英文标题】:PHP not posting textbox values produced by jQuery 【发布时间】:2014-05-30 10:14:54 【问题描述】:

我有什么:

我有一个包含两个普通文本框和两个禁用文本框的表单。 禁用的元素通过 jQuery 从启用的元素接收它们的值。 然后通过 php 发布四个元素的值

注意:我的表单被用作自定义 WordPress 页面的一部分。

问题:

禁用的元素(即通过 jQuery 派生的值)不会通过 PHP 发布。

视觉:

我的代码:

PHP:

<?php
if(isset($_POST['submit'])) 
    echo 'a= '.$_POST["textbox_a"].'<br />';
    echo 'b= '.$_POST["textbox_b"].'<br />';
    echo 'c= '.$_POST["textbox_c"].'<br />';
    echo 'd= '.$_POST["textbox_d"].'<br />';

?>

jQuery:

<script type="text/javascript">

    jQuery(document).ready(function($) 
        // Code here will be executed on document ready. Use $ as normal.
        // alert("jQuery is working fine :-)");     

        $( "button" ).click(function( event ) 
            event.preventDefault();
            $('[name=textbox_c]').val($('[name=textbox_a]').val());
            $('[name=textbox_d]').val($('[name=textbox_b]').val());
        );             

    );

</script>

HTML:

<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">

    <input type="input" name="textbox_a" />
    <input type="input" name="textbox_b" />
    <button>[jQuery] Click me to transfer</button><br />

    <input type="input" name="textbox_c" disabled="disabled" />
    <input type="input" name="textbox_d" disabled="disabled" />
    <input type="submit" name="submit" value="[PHP] Click me to post" /><br />

</form>

我的问题:

为什么 PHP 不将我的 jQuery 派生值视为常规输入值?虽然我从未使用过 Ajax,但我认为 Ajax 是解决方案是否正确?我看到的关于 Ajax 的示例对于我想要实现的目标来说似乎有点矫枉过正,但如果这是唯一的前进方向,我很乐意深入研究它。

【问题讨论】:

你为什么认为这是一个 jquery,甚至是一个 javascript 问题?即使删除所有 javascript,您也可以重新创建问题。 改用type=hidden 元素。 @KevinB - 考虑到代码的基本/简短程度,我假设 html 和 PHP 几乎不是问题。此外,在这三种语言中,我对 jQuery 最不熟悉,因此假设我的失礼发生在 jQuery 上似乎是合乎逻辑的。别担心,我不是那种对 jQuery 有非理性反感的类型。如果我从问题中删除所有 jQuery 的痕迹,你愿意吗? 不,我希望通过说明它会指出调试应该从哪个方向开始,以便下次您可以帮助自己找到答案。 @Blazemonger - 出于示例的目的,我希望能够从前端而不是源查看传输的值,但您的建议仍然是正确的。 【参考方案1】:

禁用的输入不会与表单一起提交;这是 disabled 的定义行为的一部分。

【讨论】:

谢谢。在所有正确答案中,您是第一个回答的。【参考方案2】:

禁用的元素(即通过 jQuery 派生的值)不会通过 PHP 发布。

禁用的元素不会被发送到服务器。您可以使用readonly 代替disabled,区别在于readonly 输入被发送到服务器。

【讨论】:

【参考方案3】:

我不相信 disabled 表单元素实际上会被发布(不管是由 jQuery 动态创建的)。我会改用readonly="readonly" 属性。

【讨论】:

【参考方案4】:

使用readonly 而不是disabled

From Mozilla:

已禁用

此布尔属性指示表单控件不可用于交互。特别是,click 事件不会在禁用的控件上调度。此外,禁用控件的值不会与表单一起提交。

【讨论】:

我按时间顺序选择了正确的答案,但我对你的上下文、参考和格式的答案投了赞成票。

以上是关于PHP不发布由jQuery生成的文本框值的主要内容,如果未能解决你的问题,请参考以下文章

发生带有 Jquery 对话框的邮箱时,asp.net 文本框值为空

在jquery中更改另一个文本框时动态设置一个文本框值

jQuery根据选择框填充文本框值

如何在jquery自动完成中传递文本框值

每次从 jquery 弹出窗口中读取相同的文本框值

如何使用 jquery 将“.01”添加到文本框值