【问题标题】:URL Object add or remove paramsURL 对象添加或删除参数
【发布时间】:2022-01-16 10:38:22
【问题描述】:

我正在尝试将每个复选框的值添加到 URLsearchParams,第一次检查复选框时效果很好,但是当我重新加载页面时,它不再起作用,我做错了什么?我的意思是当它是 state 时它可以工作,但在页面加载后,它不工作,我该如何解决这个问题?

function setURL(query){
//var url = window.location.protocol + "//" + window.location.host + window.location.pathname;
var url = window.location.href;
let newURL = new URL(url);
newURL.searchParams.append('brands', query)
window.history.replaceState(null, null, newURL);
}

function checkURL(){
var url = window.location.href;
let newURL = new URL(url);
window.history.replaceState(null, null, newURL);
     if(newURL.searchParams.has('brands')){
let currentBrands = newURL.searchParams.get('brands');
let brandsArray = currentBrands.split(',');
brandsArray.map(function(v,i){
jQuery('input[name="pa_brand"][value="'+v+'"]').click();
});
     }
}
checkURL();
let array = [];

jQuery('input[name="pa_brand"]').change(function(){
        let value = this.value;
        let id = array.indexOf(value);

        if(jQuery(this).is(':checked')){
        array.push(value)
        } else {
        array.splice(id,  1);
        }
setURL(array.toString())
console.log(array)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" name="pa_brand" value="116"/>
<input type="checkbox" name="pa_brand" value="117"/>
<input type="checkbox" name="pa_brand" value="118"/>

【问题讨论】:

  • 您能否更具体地了解重新加载并提供有关“不再工作”的更多技术解释,如果没有更多调试细节以及是否存在错误,这将毫无意义
  • @charlietfl 当 url 为 site.com/page 时,它将添加类似 site.com/page?brands=116 的值,但是当我使用当前 url 重新加载此页面时,然后我选中另一个复选框,它不会将值附加到搜索参数

标签: javascript jquery url


【解决方案1】:

首先将newURL.searchParams.append('brands', query) 替换为newURL.searchParams.set('brands', query)。它也可以在 checkURL 将初始值放入 array 变量中解决您的问题。我在这两个更改之后编辑了您的代码,一切似乎都很好。

let array = [];
function setURL(query){
//var url = window.location.protocol + "//" + window.location.host + window.location.pathname;
var url = window.location.href;
let newURL = new URL(url);
newURL.searchParams.set('brands', query)
window.history.replaceState(null, null, newURL);
}

function checkURL(){
var url = window.location.href;
let newURL = new URL(url);
window.history.replaceState(null, null, newURL);
     if(newURL.searchParams.has('brands')){
let currentBrands = newURL.searchParams.get('brands');
let brandsArray = currentBrands.split(',');
array = brandsArray;
brandsArray.map(function(v,i){
jQuery('input[name="pa_brand"][value="'+v+'"]').click();
});
     }
}
checkURL();


jQuery('input[name="pa_brand"]').change(function(){
        let value = this.value;
        let id = array.indexOf(value);

        if(jQuery(this).is(':checked')){
        array.push(value)
        } else {
        array.splice(id,  1);
        }
setURL(array.toString())
console.log(array)
 })

【讨论】:

  • 感谢您的回答,但想知道为什么仍然无法正常工作。
  • 我的回答有语法问题,我在最后错过了}),你能再试一次并检查它是否有效。
  • 不,没关系,我第一次使用就解决了。但是页面加载后仍然没有更新参数,奇怪!
  • 我用它stackblitz.com/edit/js-bzrm25?file=index.html它工作没有问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2018-05-14
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
相关资源
最近更新 更多