window.location.search无法更新?URL查询参数修改问题求助
问题分析与解决方案
首先看你的代码里有两个关键问题导致URL参数没更新:
1. 表单提交的默认行为没被阻止
当你点击.o_search_submit按钮时,这个按钮大概率是表单内的提交按钮,浏览器会默认触发表单的提交动作——页面会刷新或跳转,这就导致你修改window.location.search的代码还没完全生效,页面就已经重新加载了,所以控制台最后看到的还是原来的参数。
2. 选择器语法错误
你获取license_key值的代码里,类选择器少了必要的.:
$("o_website_license_search_panel input[name='license_key']").val();
应该修正为:
$(".o_website_license_search_panel input[name='license_key']").val();
修复后的完整代码
下面是修正后的代码,加上了阻止默认行为的逻辑,同时修复了选择器问题:
$( document ).ready(function() { if ($('.o_website_license_search_panel').length) { $('.o_website_license_search_panel .o_search_submit').click(function (event) { // 阻止按钮的默认表单提交行为 event.preventDefault(); var search = $.deparam(window.location.search.substring(1)); console.log('before update') console.log(window.location.search) // 修复类选择器,加上. search.license_key = $(".o_website_license_search_panel input[name='license_key']").val(); console.log('new obj ', search, $.param(search)) window.location.search = $.param(search); console.log('after update') console.log(window.location.search) }); } });
额外优化:无刷新更新URL
如果你不想页面刷新,只是想更新URL参数,可以用history.replaceState实现无刷新修改,提升用户体验:
$( document ).ready(function() { if ($('.o_website_license_search_panel').length) { $('.o_website_license_search_panel .o_search_submit').click(function (event) { event.preventDefault(); var search = $.deparam(window.location.search.substring(1)); search.license_key = $(".o_website_license_search_panel input[name='license_key']").val(); var newSearchStr = $.param(search); // 替换当前历史记录,无刷新更新URL history.replaceState({}, document.title, `${window.location.pathname}?${newSearchStr}`); console.log('Updated URL:', window.location.search); }); } });
内容的提问来源于stack exchange,提问作者Andrius
相关产品推荐
相关产品推荐

