我有一个文本框,我希望使用在控制器中的文本框中输入的值 - 单击链接(不是表单提交)。所以我假设我必须使用postlink提交。但是我如何在postlink中获得该文本框的价值? 以下是我的代码:
<?php echo $this->Form->postLink(
'Get Coords',
array('action' => 'test', $this->request->data['Rideoffer']['PickFrom'])
);
?>
我在$this->request->data['Rideoffer']['PickFrom']
上收到错误消息。 data ['Rideoffer'] ['PickFrom']是我的cakephp文本框的名称(我在firfox检查元素中看到它)。
我如何获得文本框值?
答案 0 :(得分:0)
FormHelper::postLink
方法无法获取文本框值。 postLink
方法几乎只创建了一个使用Javascript提交隐藏表单的<a>
链接元素。以下是postLink
吐出的示例:
<form action="/posts/delete/16" name="post_511c870e05d25" id="post_511c870e05d25" style="display:none;" method="post">
<input type="hidden" name="_method" value="POST"/>
</form>
<a href="#" onclick="if (confirm('Are you sure you want to delete # 16?')) { document.post_511c870e05d25.submit(); } event.returnValue = false; return false;">Delete</a>
如您所见,当您单击<a>
元素时,它会使用隐藏输入提交表单。您可以通过将参数传递给postLink
来更改此输入提交的值,但是您无法动态获取用户可以修改的文本框的值,并使用表单提交它,而无需执行额外的操作。
有两个类似的选项(一个是Javascript重量稍多):
1)由于您使用的是Javascript,因此您可以使用Javascript(或jQuery)动态地将隐藏输入的值更改为用户键入的任何内容。更好的是,您可以这样做,以便Javascript / jQuery仅在用户单击链接时更新隐藏的表单输入。请注意,甚至可以更容易使用postLink
函数并自己完成所有表单(或使用Cake的FormHelper)。
2)根本不要使用postLink
方法。使用文本框输入创建一个普通表单,并模仿postLink
的作用。具体来说,您没有表单的提交按钮。你只需要复制它吐出来的东西。
<form action="test" name="UNIQUE_ID" id="UNIQUE_ID" method="post">
<input type="text" name="data[RideOffer][PickFrom]" value="POST"/>
</form>
<a href="#" onclick="if (confirm('This will submit the form.')) { document.UNIQUE_ID.submit(); } event.returnValue = false; return false;">Click</a>
请注意,在上面的示例中,您应该将UNIQUE_ID
与相同的值匹配,并且还必须从style="display:none;"
标记中删除<form>
。