我有一个选择下拉列表,其id映射到值.
在onChange事件中,我想重定向到相同的url,但是在查询字符串中附加了“id = value”.
在onChange事件中,我想重定向到相同的url,但是在查询字符串中附加了“id = value”.
如何检查此’id’选项是否已存在于查询字符串中(我不想要多个值)并根据需要替换/追加.
我如何检查’?’已经在查询字符串中,如果不是,则附加到url.
对于$().ajax(url,{options})调用,它必须在引擎盖下做类似的事情.
我希望我可以做$().redirect(url,{id:$(this).val()})或者其他.
提前致谢.
注意:此页面可能会或可能不会传入一些不同的查询选项(在其他表单选项上设置默认值),因此无法替换整个查询字符串.
<html> <head><script type="text/javascript" src="/jquery-1.3.2.min.js"></script></head> <body> <script> $(function(){ $('#selector').change(function(){ // problem if 'id' option already exists var url = location.href + '?;id=' + $(this).val(); location.assign( url ); }); }); </script> <a href="#" onclick="location.assign( location.pathname )">reset</a> <form> <select id='selector' name='id'> <option value='1'>one</option> <option value='2'>two</option> <option value='3'>three</option> </select> </form> </body> </html>
解决方法
我最终使用RegExp匹配来覆盖选项.
jQuery.param接受一个哈希并将其序列化为query_string
但它没有提供反转(分解query_string).
jQuery.param接受一个哈希并将其序列化为query_string
但它没有提供反转(分解query_string).
// put function into jQuery namespace jQuery.redirect = function(url,params) { url = url || window.location.href || ''; url = url.match(/\?/) ? url : url + '?'; for ( var key in params ) { var re = RegExp( ';?' + key + '=?[^&;]*','g' ); url = url.replace( re,''); url += ';' + key + '=' + params[key]; } // cleanup url url = url.replace(/[;&]$/,''); url = url.replace(/\?[;&]/,'?'); url = url.replace(/[;&]{2}/g,';'); // $(location).attr('href',url); window.location.replace( url ); };
然后在HTML中
$('#selector').change(function(){ $.redirect( location.href,{ id : $(this).val() }) })
感谢所有回复的人.