【问题标题】:PHP form not working after jQuery replaces an INPUT objectjQuery 替换 INPUT 对象后 PHP 表单不起作用
【发布时间】:2014-01-07 07:39:44
【问题描述】:

我有一个带有选择对象的表单。选项是使用来自 mySQL DB 的 PHP 生成的。我还有一个“新”选项可用。如果用户选择“新”,我正在使用 jQuery - replaceWith 函数将选择对象更改为输入类型=“文本”对象。

这一切都很好,除了提交表单后 PHP $_POST['description'][0] 为空。为什么会这样?下面我复制了选择对象和 jQuery 的快照。

jQuery:

$(function() {
    $('select#description').change(function() {
        if ($(this).val() == 'new')
        var x = $(this).attr('name');
        $(this).replaceWith('<input type="text" name="description" id="description">');
        $('input#description').attr('name', x);
        $('input#description').attr('id', x);
    });
});

HTML/PHP:

<td>
   <select id='description' name='description[$i]'>
                        <option value=''></option>
                        <option name='[$i]' value='new'>new</option>";
                        echo $list = $this->desc_list();
echo "      </select>
 </td>

这是我正在寻找的输出:

<select id='description' name='description[0]'>
<option value></option>
<option value='new'>new</option>
<option value='1'></option>
</select>

value='1' 的地方没有描述,因为当 PHP 保存最后一个条目时它是空的。一旦用户选择“新”,代码会将选择对象更改为:

<input type='text' name='description[0]' id='description[0]'>

下一页代码可以很简单

echo $_POST['description'][0]

但它不会回显在文本框中输入的内容。为什么最后一个条目是空的?

【问题讨论】:

  • 如果是 HTML/PHP,你能显示输出吗?你给的是代码本身..
  • var_export($_POST) 说什么?里面有什么和description相关的吗?
  • 对不起,我不知道如何使用 'var_export($_POST)' 我只知道一旦我点击提交并要求 PHP 回显 $_POST 它显示为空,这可能是因为 PHP 确实无法识别输入,因为它已被 jQuery 替换?
  • 请发个phpfiddle什么的
  • 这是您对 Prodikl 的要求,我不确定这是否能帮助您更好地理解。 phpfiddle.org/main/code/7id-4fc

标签: php jquery


【解决方案1】:

因为您已将“description[$i]”替换为“description”

【讨论】:

  • var x = description[$i] 然后我使用了 $('input#description').attr('name', x);将名称改回描述[$i]
【解决方案2】:

答案被接受:下面描述的解决方案不正确。这个答案的 cmets 内的对应关系似乎已经导致了解决方案。

您的问题似乎是您尝试回显 POST 变量的方式: echo $_POST['description'][0] 永远不会提供您输入文本的值,因为该字段的名称是“description[0]”,因此您需要调用echo $_POST['description[0]']

如果这不能解决您的问题并且您不熟悉 var_export:请尝试在 page2.php 中的 while 循环上方/下方放置 print_r($_POST);,并让我们知道输出。

【讨论】:

  • 感谢您的指导。我改变了我的代码以另一种方式工作,但是我仍然想了解我在这段代码中做错了什么。 print_r($_POST);给出:数组([project_no] => 2 [pin] => n_projects [contracting_no] => 1 [lines] => 3 [asset_no] => Array([0] => 1 [1] => 1 [2] => 1 ) [数量] => 数组 ( [0] => 1 [1] => 3 [2] => 5 ) [unit_price] => 数组 ( [0] => 2 [1] => 4 [ 2] => 6 ) [Save] => Save ) 我需要在列表中看到以下内容,但它不存在。 [描述] => 数组([0] => 苹果 [1] => 梨 [2] => 橙子)
  • 我认为由于 jQuery 在页面加载后替换了输入,因此它不再被视为表单的一部分,这可能吗?
  • 其实我只是证明自己错了,显然表单提交实际上将“['description[0]']”转换为“['description']['0']”,我似乎仍然需要学习自己。我获取了 phpfiddle 的代码并在本地对其进行了测试——它可以工作。我的输出(包括 print_r):数组([description] => Array([0] => test1 [1] => test2 [2] => test3)[submit] => submit)test1test2test3。您是否随时通过 jQuery 更改表单提交?
  • 哈哈,我写的代码对你有用,但对我没用,我很幸运。 jQuery 中根本没有改变这种形式。可能是因为我使用 chrome 作为我的浏览器,我真的没有其他任何东西可以考虑。但很高兴知道代码正在运行。
  • 我建议将此问题导出到独立版本,没有任何周围的代码(就像我一样)。我使用了两个 php 文件,删除了 mainfile 的周围功能,并将 jQuery 和您的 JS 包含在 mainfile 的 echo 中。它适用于 Firefox 和 Chrome 是否适合您作为独立版本使用会很有趣?
猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 2014-01-04
  • 2011-03-30
相关资源
最近更新 更多