2010-03-30 2 views
2

я следующие 3 URLs:держать 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

+0

Как создается HTML-код? т. е. это простые HTML-файлы, или вы используете PHP, JSP и т. д.? –

ответ

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

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

порядок параметров изменится, но все равно будет правильным +1 –

0

«Теперь я хочу добавить, что либо из параметров в список существующих параметров или изменить параметры, если его там уже»

Я бы с parse_str()/parse_url() функция для разделения URL в ассоциативный массив, то вы можете добавить/обновить элемент массива с новым значением и объединить его обратно с допустимым URL-адресом с помощью http_build_url(). Пожалуйста, посмотрите на примеры в PHP Manual, это проще написать код, чем писать об этом;)


«затем обновите страницу»

ответы о скрытых элементов формы не являются плохо, но мне интересно, поймет ли пользователь, что произойдет (у него не будет видимого подтверждения того, что его предыдущий выбор запомнился, но вы его каким-то образом сохраните). Из-за этого я бы пошел немного другим путем: считая, что формы генерируются с помощью php и не являются статическими HTML, почему бы вам просто не убедиться, что параметры, выбранные в первом представлении формы, подсвечиваются, когда вы показываете форму для последующие представления?

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

Это выглядит немного неаккуратно, но если вы сделаете привычку ввода повторно отображая пользователя вы сохраните их, набрав (они будут ненавидеть вашу страницу, если они должны заполнить опустошена форме 3 раза из-за некоторые проверки).

Для тегов опций выбран правильный атрибут, для флажков/переключателей он «проверен», текстовые входы имеют атрибут «значение», где вы можете вводить все, что хотите, и т. Д. Не уверен, что я не говорю о что-то очевидно для вас ...