2015-05-17 5 views
1

Я хочу обновить строку запроса url, нажав на флажок. Вот код, он не работает правильноОбновить строку запроса в url

param1=param1=true 
param1=param1=param1=false 
param1=param1=param1=param1=true 

вместо:

param1=false 
param1=true 

Вот unrefactored код:

if (this.checked) { 
     if (window.location.href.search('[?&]') === -1) { 
     window.history.pushState('object or string', 'Title', window.location.href + '?param1=true'); 
     } else { 
     window.history.pushState('object or string', 'Title', window.location.href.replace(/param1=false|true/i, 'param1=true')); 
     } 

    } else { 
     if (window.location.href.search('[?&]') === -1) { 
     window.history.pushState('object or string', 'Title', window.location.href + '?param1=false'); 
     } else { 
     window.history.pushState('object or string', 'Title', window.location.href.replace(/param1=false|true/i, 'param1=false')); 
     } 
    } 
+0

возможно дубликат [Добавление параметра в URL с JavaScript] (http://stackoverflow.com/questions/486896/adding-a-parameter-to-the-url-with-javascript) – Bhullnatik

+0

@Bhullnatik, вам лучше перечитать мой вопрос. –

+0

Это похоже на дубликат http://stackoverflow.com/questions/10420955/history-pushstate-change-query-values, хотя этот вопрос пока не кажется очень удовлетворительным. (Конечно, вы можете попробовать добавить щедрость.) –

ответ

2

Рассмотрим это:

> 'param1=false'.replace(/param1=false|true/i, 'param1=true') 
"param1=true" 
> 'param1=true'.replace(/param1=false|true/i, 'param1=true') 
"param1=param1=true" 
> 'true'.replace(/param1=false|true/i, 'param1=true') 
"param1=true" 

дело в том, что ваше регулярное выражение либо param1=false, либо только true. Вы должны положить часть false|true в группу (в круглых скобках), чтобы сделать | не применимым к части param1=. Таким образом, регулярное выражение должно быть /param1=(false|true)/i:

> 'param1=true'.replace(/param1=(false|true)/i, 'param1=true') 
'param1=true' 
0

Если нет других параметров в строке запроса, вы можете восстановить свой адрес, как это:

var href = window.location.protocol + '//' + window.location.host + window.location.pathname; 
if (this.checked) { 
    window.history.pushState('object or string', 'Title', href + '?param1=true'); 
} else { 
    window.history.pushState('object or string', 'Title', href + '?param1=false'); 
} 
Смежные вопросы