我有一个疑问,是否可能在同一个视图页面上有一个带有多个操作的表单(视图页面(,比如我想保存、更新和删除。。如果用户点击任何按钮,那么它必须调用必要的控制器功能,这可能吗??
您有一些方法可以做到这一点,但所有这些方法都需要一些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
结构上,您可以根据用户按下的按钮采取适当的操作