繁体   English   中英

如何使一种形式具有多种动作

[英]How to have one form with multiple actions

我有一个疑问,是否有可能有一个表单(视图页面)具有多个动作,例如我想在同一视图页面上进行保存,更新和删除操作。如果用户单击任何按钮,则必须调用有必要的控制器功能吗?

您有一些方法可以做到,但所有方法都需要一些javascript代码。

我能想到的最简单的是点击每个按钮时,动态地改变表单的动作(类型的button ,不submit这是默认设置),然后提交表单。

例:

<form id="myform" name="myform" method="post" action="">
  <input id="myinput" name="myinput" type="text"/>
  [..]other inputs[/..]

  <button type="button" onClick="deleteAction()">DELETE</button>
  <button type="button" onClick="updateAction()">UPDATE</button>
  <button type="button" onClick="saveAction()">SAVE</button>
</form>

JS函数在哪里:

function deleteAction() {
    changeActionAndSubmit('/action/delete');
}

function updateAction() {
    changeActionAndSubmit('/action/update');
}

function saveAction() {
    changeActionAndSubmit('/action/save');
}

function changeActionAndSubmit(action) {
    document.getElementById('myform').action = action;
    document.getElementById('myform').submit();
}

希望我对此表示怀疑,并能解决您的问题:)

一种非JS方法可以实现相同的目标,那就是使用每个按钮上的名称/值参数来让您的后端决定要做什么。

<?php echo form_open('controller/method'); ?>

// form fields go here

<button type="submit" name="add" value="y">press to add</button>
<button type="submit" name="update" value="y">press to update</button>
<button type="submit" name="delete" value="y">press to delete</button>

<?php echo form_close(); ?>

然后,在控制器上,在验证用户输入后,您可以通过读取按钮向控制器发送的信息来确定按下了哪个按钮(我假设您使用的是CI的表单帮助器)

if ($this->input->post('add') == 'y')
{
  // the user wants to add
}

else if ($this->input->post('update') == 'y')
{
  // user wants to update
}

else
{
  // user wants to delete
}

// rest of code goes here

在每个if结构上,您可以根据用户按下的按钮采取适当的操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM