2010-03-30 51 views
2

我有以下3個網址:保持PARAMS從表單添加其他

http://www.test.com?a=1 
http://www.test.com?a=1&b=3 
http://www.test.com?a=1&b=2&c=99 

現在的形式我有一個下拉菜單,像這樣:

<select name="b"> 
    <option value="1">1</option> 
    ... 
</select> 

現在我想要麼將該參數添加到現有參數列表中,或者編輯已經存在的參數,然後刷新頁面。 任何想法? 感謝

+0

提交表格? – Alsciende 2010-03-30 13:34:44

+0

如何生成HTML?也就是純HTML文件,還是使用PHP,JSP等? – 2010-03-30 13:38:40

回答

1

你可以做到這一點的正則表達式的方法:

var myNewValue = 1; // the new value of input named b 
var url = window.location.href; 
if(url.match(/\Wb=/)) url = url.replace(/(\Wb=)[^&]*/, "$1"+myNewValue); 
else url = url+"&b="+myNewValue; 
window.location.href = url; 
+0

這段代碼需要一個例子:if(!url.match('^。* [?]'))url = url +「?b =」+ myNewValue;'如果沒有其他參數存在,就添加一個參數。 – James 2014-01-23 23:25:22

0

你應該寫你想保留爲隱藏輸入新形式的參數 我的PHP是生鏽的,但這裏有雲:

<input type="hidden" name="a" value="<?php echo (int)$_GET['a']; ?>" /> 

除非使用正則表達式來解析參數列表,否則JavaScript不能直接訪問頁面的請求參數。然而,服務器端技術(如您的PHP)在生成頁面時具有訪問權限。

通過在窗體中創建隱藏的輸入,用戶將不會有更改值的選項,但當表單再次提交時,它們將被包含。

1

我不確定您是否使用PHP或JavaScript解決此問題,因爲您使用兩者來標記問題。

使用PHP,當你提交表單的其他參數就會消失,除非你在表單中的舊參數一樣,所以你例如:

<select name="b"> 
    <option value="1">1</option> 
    ... 
</select> 
<input type="hidden" name="a" value="<?php echo htmlentities(@$_GET['a']); ?>" /> 
<input type="hidden" name="c" value="<?php echo htmlentities(@$_GET['c']); ?>" /> 

但是,如果你使用Javascript,就像其他人提到的那樣,您將不得不解析查詢字符串,但實質上也是這樣做的:將其他參數添加到您的位置。

+0

params的順序會改變,但仍然正確+1 – 2012-11-22 10:58:20

0

現在我想要麼PARAM添加到現有則params的列表或編輯帕拉姆如果已經有

我會去與parse_str()/parse_url()函數分裂成URL關聯數組,則可以使用新值添加/更新數組元素,並使用http_build_url()將其合併回有效URL。請看看PHP手冊中的例子,它更容易編寫,這比寫下來;)


然後刷新頁面

的答案有關隱藏表單元素不不好,但我不知道用戶是否會理解發生了什麼(他將沒有可見的證實,他以前的選擇被記住,但你會以某種方式保存它)。正因爲如此,我會走一條不同的路徑:假設表單是使用php生成的,並且不是靜態HTML,爲什麼不確保在第一次提交表單時選擇的選項在您顯示錶單時突出顯示隨後提交?

<select name="b"> 
    <option value="1" <?php if(isset($params['b']) && $params['b'] == 1) echo 'selected="selected"'; ?>>1</option> 
</select> 

它看起來有點凌亂,但如果你要讓重新顯示用戶的輸入習慣下來可以節省打字(他們會恨你的頁面,如果他們將不得不填補空形式,因爲3次一些驗證)。

對於選項標籤,正確的屬性被「選中」,對於複選框/單選按鈕,它被「選中」,文本輸入具有屬性「值」,您可以輸入任何你想要的東西等等。不知道我是不是在談論對你來說很明顯...