【问题标题】:update form field with js but not showing in submitted data用js更新表单字段但未显示在提交的数据中
【发布时间】:2012-02-10 13:36:41
【问题描述】:

在 CakePHP 2.0 中使用 JsHelper 进行实验,我得到了一个 Request 方法,用 AJAX 调用的结果更新表单字段的值 - 到目前为止,一切都很好。但是,在检查表单字段时,它说:

<input type="hidden" id="JobsPartUnitcost" name="data[JobsPart][unitcost]">5.55</input>

但是当我复制它并第一次将其粘贴在上面时,它说

<input type="hidden" id="JobsPartUnitcost" name="data[JobsPart][unitcost]"></input>

当我提交表单时,该值为空。为什么浏览器显示该值,但底层 DOM 没有注册它?

使用 Mac/Safari、CakePHP 2.0、JQuery

编辑 这里要求的是表单数据转储

    Array ( [JobsPart] => Array ( [job_id] => 1 [company_id] => 4 [part_id] => 2 [qty] => 3 [unitcost] => ) )

这里是 AJAX 代码

$this->Js->get('#JobsPartPartId')->event('change',
    $this->Js->request(
        array(
            'controller'=>'JobsParts',
            'action'=>'getPart'
        ),
        array(
            'update'=>'#JobsPartUnitcost',
            'async' => true,
            'method' => 'post',
            'dataExpression'=>true,
            'data'=> $this->Js->serializeForm(array(
                'isForm' => false,
                'inline' => true
            ))
        )
    )
);

【问题讨论】:

  • 你是如何从隐藏中获取价值的,你能通过你的ajax帖子代码吗?
  • 复制/粘贴子问题可能与浏览器如何显示页面源有关 - 大多数浏览器(不能专门与 safari 对话)会显示下载的原始页面源,而不是“当前状态”源,当您执行“查看源”时。在没有更多信息的情况下无法回答其他问题 - 注意发布设置表单的 JS,以及发送到服务器的内容的转储?
  • 好的。我找到了一种解决方法,但除非没有其他人找到答案,否则我不会将其发布为答案。在我的静态视图中,我现在只有 输入字段所在的位置。我的 Ajax 调用现在更新 '#part' 并且我的动态视图(由控制器 ajax 操作调用的视图)现在输出整个字段 - Form->input('unitcost', array('type ' => '文本', '值' => $part['Part']['costamount'])); ?>。丑陋但有效。

标签: javascript ajax forms cakephp


【解决方案1】:

需要设置value属性:

<input type="hidden" value="YOUR VALUE HERE" name="data[Etc][field]" />

您不会在输入标签中包装值。

【讨论】:

  • 将值包装成&lt;input&gt;Value&lt;/input&gt; 将在浏览器中呈现为值,因为它会将其视为传统标签。
  • 我也是这么想的。那么,根据我现在展示的代码,我该怎么做呢?
  • 你是如何生成隐藏输入字段的?
  • 你需要使用&lt;?php $this-&gt;Form-&gt;hidden('fieldname', array( 'value' =&gt; valuehere ) ); ?&gt;
  • 该值是在页面加载后从 Ajax 调用(见编辑)生成的。 'value' => 'valuehere' 不会产生影响(会吗?)。
【解决方案2】:

好的。我找到了一种解决方法,但似乎没有其他人找到直接的解决方案。

在我的静态视图中,我现在只有 &lt;td id="part"&gt;&lt;/td&gt; 输入字段所在的位置。我的 Ajax 调用现在更新“#part”,我的动态视图(由控制器 ajax 操作调用的视图)现在输出整个字段 - &lt;?php echo $this-&gt;Form-&gt;input('unitcost', array('type' =&gt; 'text', 'value' =&gt; $part['Part']['costamount'])); ?&gt;。丑陋但有效。

【讨论】:

    【解决方案3】:
    $this->Js->get('#JobsPartPartId')->event('change',
     $this->Js->request(
        array(
            'controller'=>'JobsParts',
            'action'=>'getPart'
        ),
        array(
            'success'=>'$("#JobsPartUnitcost").val(data)',
            'async' => true,
            'method' => 'post',
            'dataExpression'=>true,
            'data'=> $this->Js->serializeForm(array(
                'isForm' => false,
                'inline' => true
            ))
        )
    )
    

    );

    【讨论】:

    • 你参加过这条线路吗? '成功'=>'$("#JobsPartUnitcost").val(data)',
    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多