2010-06-10 41 views
1

我有一個搜索表單默認情況下選中幾個複選框。當表單提交時,作爲一個GET,url將只包含被選中的複選框列表。如何使複選框具有與其他輸入相同的提交行爲?

http://www.example.com/page/?checkbox1=yes&checkbox2=yes 

很難與這種情況下,以確定當用戶第一次到達這個搜索頁面,當他們提交表單時取消選中所有的複選框,因爲查詢字符串看起來相差無幾。

爲了解決這個問題,我已經開始在複選框之前注入一個隱藏的字段,其名稱和'no'值相同。當複選框未被選中時,瀏覽器將發送隱藏字段的無值,當設置了複選框時,瀏覽器將使用複選框的「是」值覆蓋隱藏字段。

<input type="hidden" name="checkbox1" value="no" /> 
<input type="checkbox" name="checkbox1" value="yes" /> 

當用戶提交表單與所有的複選框取消選中我得到這個查詢字符串:

http://www.example.com/page/?checkbox1=no&checkbox2=no 

這似乎在FF工作,鉻,IE5.5 +所以我'我要安全使用這種方法還是有更好的方式來使複選框提交像輸入和選擇?

回答

2

這是一個非常聰明的主意。由於未經檢查的複選框未顯示在真正有助於確定用戶是否第一次輸入表單的請求中。

但要知道您可以簡單地使用具有默認值的隱藏字段。所以當用戶輸入表單時,參數沒有設置。只要他提交表格,價值就會被設定。

你也可以使用一個名稱爲提交按鈕,然後你可以看它是否已提交:

<input type="submit" name="submit" /> 

那是解決問題了嗎?

+0

只有在使用提交按鈕提交表單時(並且只有在有值的情況下)。如果表單是通過回車鍵(至少在某些瀏覽器中)或JavaScript提交的,則不會提交。 – Quentin 2010-06-10 19:15:07

+0

因爲他沒有發送提交值,所以你適合IE瀏覽器。我的第一個建議(反正更好)將解決問題:) – 2ndkauboy 2010-06-10 19:24:33

0

地址,真正的問題:

確定當用戶第一次到達這個搜索頁面,當他們提交的所有複選框形式未選中

沿有一個隱藏字段之間的區別的

<input type="hidden" name="submitted" value="true"> 

線然後,您可以使用複選框以組:

<input type="checkbox" name="foo" value="bar" id="foo_bar"> 
<label for="foo_bar">Bar</label> 

<input type="checkbox" name="foo" value="baz" id="foo_baz"> 
<label for="foo_baz">Baz</label> 

然後你可以在服務器上循環它們。你怎麼做取決於你的服務器端環境。在大多數語言中,您可以調用返回數據數組的方法(IIRC Java表單庫傾向於以這種方式工作),或者只是在數組上下文中請求數據(Perl庫通常以這種方式運行)。 PHP是服務器端編程的通用語言,有點奇怪,它要求您重命名字段以字符[]結尾。

-1

正如你所說,它似乎工作得很好。或者,你可以避免使它像一個正常的輸入行爲,只是做一個檢查,看看輸入是否存在(如果輸入不存在,然後將其視爲假,如果它,將其視爲真)。

例如,在PHP

如果(isset($ _ GET [ 'checkbox1']){...}

在ASP.NET

如果( Request.QueryString [「checkbox1」]!= null){...}

當然你可能有你的想要做那個客戶端的原因。

+0

這並不能解決問題中所表達的問題:「確定用戶第一次到達此搜索頁面時的時間與未提交時未提交所有複選框的表單之間的差異」 – Quentin 2010-06-10 19:12:36

+0

謝謝。它只是看着它的另一種方式。 – smdrager 2010-06-10 19:13:54

相關問題