2012-07-03 56 views
1

我在表單中有2個提交按鈕,我試圖讓每個按鈕都轉到不同的控制器方法。我試圖避免使用多種形式。Codeigniter通過單擊按鈕更改表單動作

我目前使用

<button type="submit" onclick="javascript: form.action='restore'">Restore</button> 
<button type="submit" onclick="javascript: form.action='delete'">Delete</button> 

...它的工作原理,但我不知道這是最好的方法。有什麼想法嗎?

回答

5

通常我想通過給按鈕/輸入標籤名稱attr來處理多個提交。通過這種方式,您可以通過檢查提交的按鈕來提交和調用同一控制器中的一個功能/操作。 e.g:

<form id="your_form" action="your_controller/process" method="post"> 
<input type="submit" name="restore" id="restore" value="Restore" /> 
<input type="submit" name="delete" id="delete" value="Delete" /> 
</form> 

然後在你的控制器,會有被稱爲函數 「過程」 這樣做:

function process(){ 
    if(isset($_POST["restore"])) { 
    //do your restore code 
    } 

    if(isset($_POST["delete"])){ 
    //do your delete code 
    } 
} 

希望這會有所幫助。

+0

謝謝!這看起來像一個很好的選擇,特別是如果你想避免js。我沒有意識到可以獲得提交按鈕的價值。 – CyberJunkie

0

這是怎麼回事?

<?php echo form_open('controller/method',array('id'=>'my_form')); ?> 
<!--Form--> 
<input type="submit" value="Submit" /> 
<?php echo form_close();?> 

希望它可以幫助

+0

謝謝,但我將如何通過推送提交按鈕填充'my_form'? – CyberJunkie

+0

my_form只是表單的ID。您必須將輸入寫入。例如: fedejp

+0

嗯......我需要更改表單動作url,'method'。每個按鈕都應該改變表單動作。你只是改變'id'選擇器,不是嗎?我錯過了什麼嗎? – CyberJunkie

2

最好做的是使用JavaScript,畢竟頁之後被渲染它被完成。這是一個替代解決方案(對不起,這是jQuery我不擅長香草JS)。

查看:

<div id="submit-buttons" action="<?php echo site_url('controller/postmethod1'); ?>​"​​​​​>Submit 1</div> 

<div id="submit-buttons" action="<?php echo site_url('controller/postmethod2'); ?>">Submit 2</div>​ 

JS:

​$(function(){ 
    $('.submit-buttons').click(function(){ 
     $('form').attr('action',$(this).attr('action')).submit(); 
     return false; 
    }); 

});​ 

所以被點擊按鈕後時,將更新從提交按鈕的action屬性的表單操作參數,然後提交表單之後。 P:我沒有測試它,但它應該工作。

+0

謝謝!這應該很適合jquery! – CyberJunkie