我有一個Perl CGI程序,我在其中設計了一個HTML表單。 如果有人點擊這個表單中的按鈕,這個文件中的CGI/Perl子例程就會被執行。 由於表單中有多個按鈕,我將它們的類型設置爲「按鈕」,而不是「提交」。當有人點擊一個按鈕時,如何讓CGI程序運行?
這是一家書店網站,我有三種按鈕,每種都有一種書籍(例如,我的按鈕是:「科幻小說」,「小說」和「詩歌」)。我必須使用按鈕。點擊每個按鈕後,會顯示一份這類書籍列表,用戶可以選擇書籍。我不應該使用javascript:它應該由CGI控制。
我有一個Perl CGI程序,我在其中設計了一個HTML表單。 如果有人點擊這個表單中的按鈕,這個文件中的CGI/Perl子例程就會被執行。 由於表單中有多個按鈕,我將它們的類型設置爲「按鈕」,而不是「提交」。當有人點擊一個按鈕時,如何讓CGI程序運行?
這是一家書店網站,我有三種按鈕,每種都有一種書籍(例如,我的按鈕是:「科幻小說」,「小說」和「詩歌」)。我必須使用按鈕。點擊每個按鈕後,會顯示一份這類書籍列表,用戶可以選擇書籍。我不應該使用javascript:它應該由CGI控制。
它應該是那樣簡單,在你的形式:
<input type="submit" name="Button1" value="Button 1" />
<input type="submit" name="Button2" value="Button 2" />
<input type="submit" name="Button3" value="Button 3" />
而且,在你的腳本:
if ($cgi->param('Button1')) {
# Button1 was clicked, do stuff...
} elsif ($cgi->param('Button2')) {
# Button2 was clicked, do something else...
} elsif ($cgi->param('Button3')) {
# Button3 was clicked, do whatever you want...
} else {
# No button clicked; show the form
}
您可以指定一個不同的名稱,以便在服務器端區分它們(如果它是有瑕疵的)。 否則,您可以嘗試使用JavaScript提交表單...
我確定您可以使用JavaScript實現它!
你想要做什麼?
您可以在窗體中使用type="submit"
按鈕的數量沒有限制。只要設置了名稱/值,只有用於提交表單的按鈕的名稱/值對將被髮送到服務器。
如果您使用圖像提交按鈕或<button>
元素本身,但由於瀏覽器支持有幾個注意事項,但聽起來不像在這種情況下發生的那樣。
我將所有按鈕的類型更改爲「提交」,然後檢查其值以知道哪個按鈕被按下。 你的指導給了我一個關於如何處理我的問題的很好的見解。 非常感謝。 – Shadi 2010-02-13 18:35:48
一旦我有了一個類似的(我認爲)但更容易的情況:我有一個CGI程序生成一個表單,當點擊「Submit」按鈕時,我想要運行相同的表單。爲此,只需要讓表單的action屬性調用相同的CGI程序即可。
對於你的情況,看起來你有多個Perl腳本可以調用,具體取決於按下哪個按鈕。我沒有用過CGI的Perl,但有一種方法可以做到這一點,那就是不管調用哪個按鈕都會調用一個CGI腳本。然後該腳本檢查GET或POST值並確定按下哪個按鈕,然後調用相應的子例程或腳本。谷歌發現PerlDoc CGI page,這應該可以幫助你開始。
謝謝。 我用你的「有一個單一的CGI腳本」的指導,然後「實現哪個按鈕被按下。」 這非常有幫助。 謝謝。 – Shadi 2010-02-13 18:33:47
是它去到不同的頁面好嗎當他們點擊按鈕,還是你想要一個AJAX解決方案? – 2010-02-13 16:52:19
是的,點擊按鈕後可以轉到不同的頁面。 我不應該使用AJAX。 我期待着您的迴音。 非常感謝您的幫助。 – Shadi 2010-02-13 17:22:38
聽起來好像你的問題描述得很差,你真正想知道的是如何確定你的腳本中點擊了哪個按鈕;這在我的答案中已經涵蓋。 – 2010-02-13 17:53:29