2010-09-21 82 views
2

我正在構建一個沉重於jQuery的應用程序。其中大部分我可以在不使用JS的情況下處理,並且仍然有一個功能正常的站點,但是有一點可以避開我。 (注意,我使用的是ASP.NET MVC,但在這種情況下應該沒關係)非JavaScript版本的輸入自動完成所需的建議

我有一個很好用的jQuery-UI自動完成的輸入字段。行爲非常簡單。要求用戶輸入他們的城市,但被賦予一個有效城市的自動完成列表。如果該城市無效,則服務器端驗證會觸發並告知他們再次嘗試。

如果他們確實選擇了有效的城市,那麼jQuery方法會更新一個隱藏字段,該字段包含所選城市的CityID。這工作非常好,我非常喜歡這個表演。

這是問題進入的地方。如果JS在瀏覽器中不可用,則ID字段不會更新,因此數據庫不會更新。我沒有在服務器端使用AutoComplete輸入,只有ID字段。什麼是解決這個問題的好辦法?

回答

1

如果由於某種原因sje397的答案不適用於您(這是一個優雅的解決方案,除非城市自動選擇基於屏幕上的其他字段,例如郵政編碼或州),只需POST兩者領域。在評估POST數據時,如果CITY文本框中包含數據,而隱藏字段沒有,則使用jquery回調所使用的相同驗證方法評估輸入的城市。如果隱藏字段有數據,則您認爲已啓用javascript並使用您當前的邏輯。

+0

嗯,我喜歡這兩種選擇。我將不得不考慮這一點。謝謝。 – 2010-09-21 15:30:29

+0

謝謝..我想我會用你的方案。在下拉列表中,對我來說更有意義。 – 2010-09-21 16:33:46

0

默認情況下,通過交互將用戶的輸入發送到服務器,如果啓用了JavaScript,請更改它,以便它只發送ID而不是(顯然使用javascript)。

3

默認爲包含城市作爲選項和ID作爲值的選擇元素,並使用頁面加載時的腳本將其更改爲自動填充字段。

1

有幾個選項:

1 - 最初提供HTML,顯示「隱藏」的輸入,並且不包括在「自動完成」之一。當JS加載時,有一個函數可以根據當前情況編輯DOM。

2 - 表單默認將「自動完成」數據發送到服務器。使用javascript編輯「發送」功能,讓它切換到「隱藏」輸入。