2013-02-28 71 views
0

有一個PHP生成的HTML 4過渡頁面,用於編輯單個記錄數據庫中的數據。用戶有兩種選擇:存儲更改或刪除記錄。我使用帶有控件的表單(其中一些隱藏):點擊提交表格

<form method="post" action="object_mod.php"><!-- this is another file --> 
<!-- inputs follow --> 

因爲我想處理兩個動作,前</FORM>標籤刪除或保存我把兩種形式提交按鈕的記錄,:

<input type="submit" id="btnSubmit" value="Save"> 
<input type="submit" id="btnDelete" value="Delete"> 
</form> 

因爲用戶應該確認刪除,添加以下onclick事件:

<input type="submit" id="btnDelete" value="Delete" onclick="javascript:deleteRecordConfirm();"> 

(我也嘗試沒有javascript:onclick="javascript:deleteRecordConfirm(); return true;"),但它不提交表單。

的JS功能

function deleteRecordConfirm(){ 
    if(confirm('Are you sure to delete?')){ 
    document.getElementById("field_action").value=-1; 
    //document.forms[0].submit(); 
    return true; 
    } 
} 

field_action設置爲-1,所以我知道我想刪除記錄,而不是將其保存object_mod.php。

這裏去問題,爲什麼這個表格不能刪除

我認爲這將是一件好事,如果用戶已禁用JavaScript提交表單,即使沒有確認,所以這就是爲什麼我使用<INPUT TYPE="submit">刪除。這是個好主意嗎?我正在考慮給予兩個獨立的表格(事實上,刪除應該只有一個帶有記錄ID的隱藏字段),並帶有自己的提交按鈕,一個用於刪除,另一個用於保存。

事實上,該頁面可以在某種類型的內聯網中工作,我信任的用戶以及我不怕黑客攻擊或其他任何內容,但是也歡迎任何安全說明。

(我在Firefox 19.0上測試過,Javascript控制檯顯示沒有錯誤,w3c驗證器說這是一個有效的頁面)。

+2

這篇文章不是很適合使用stackoverflow的問答格式。我建議如果上面#1有一個問題,請清楚地問清楚。將其他項目留給其他問題。 – 2013-02-28 20:37:01

+0

好的,我會編輯這個。對不起 – Voitcus 2013-02-28 20:38:37

回答

1

表格應根據您的代碼提交。我唯一發現的是你應該用/>終止輸入標籤。

但是...這樣,即使確認被取消,表格也會被提交。使用form.onsubmit處理函數,如果返回false,則表單不會提交。

我不認爲@ B3aT的答案是正確的,不是無條件的最佳途徑「外化」這麼說。許多最簡單的是最好的。

+0

問題是它根本不提交 - 只有當我把document.forms [0] .submit()。所以它的工作原理,但我不知道爲什麼我需要這個... – Voitcus 2013-02-28 20:49:23

+0

而我說,看代碼,形式_should_提交。事實上,我甚至做了[小提琴](http://jsfiddle.net/tYqj9/6/),看看你的自我。您是否正確終止輸入? – marekful 2013-02-28 20:56:27

+0

是的。在上面我輸入它不復制/粘貼,並且兩個輸入都是'<輸入xxxx />'。代碼執行(顯示'confirm()')。 DTD是「<!DOCTYPE html PUBLIC」 - // W3C // DTD HTML 4.01 Transitional // EN「」http://www.w3.org/TR/html4/loose.dtd「>'哪個AFAIR沒有需要這樣的終止,但我有一個習慣就是按照你的方式去做。 – Voitcus 2013-02-28 21:04:41

1

我認爲最好的辦法是「外部化」實際的表單發佈。

//定期按鈕(不提交) //調用自己的函數(保存和刪除) //你做你的邏輯之後就document.forms["myform"].submit();

另一種解決方案是增加一個名爲勾選「刪除「並將」保存「按鈕重命名爲」完成或完成「。而在服務器端,如果「刪除」被激活,然後..刪除它。

通常「每個條目」級別需要「刪除」(同一用戶有多條記錄),因此您必須創建一個單獨的按鈕/鏈接並最終執行ajax請求/訪問URL = delete = 1 & id = 3。

您需要製作自定義的yes/no windows或使用jQuery插件,唯一的瀏覽器標準是「確認」。

+0

你是對的,如果用戶禁用Javascript,這個field_action永遠不會被設置爲-1,所以讓用戶更改複選框將會一直工作。也感謝你爲'確認'的答案。 – Voitcus 2013-02-28 20:51:57

0

OK,它的工作,這實際上非常愚蠢的錯誤。問題出在這個按鈕上,因爲它在表單之外。我非常確定,我沒有檢查PHP代碼,而是從腳本中複製所有內容,而不是像我應該完成的那樣複製HTML代碼。

據我瞭解這個正確的行document.forms[0].submit();工作,但它不是因爲它是按鈕誰提交的表格,但document.form[0]對象本身。

謝謝你的答案。我會嘗試Marcell提供的form.onsubmit提示。