在不刷新页面的情况下无法更新问号后面的部分,但可以更新 URL 哈希(看起来像http://domain.com/file.php#fav_fruit=apple)。我不知道如何在普通的旧 JavaScript 中做到这一点,但我已经使用 jQuery 和 jQuery.address plugin 做到了这一点。
然后,您可以设置文本框以在每次更改值时更新 URL,方法是执行以下操作:
$("#mytextbox").change(function(){
$.address.parameter("fav_fruit", $(this).value());
});
这个插件的好处是您可以附加一个函数,以便您可以检测 URL 何时更改(即重新加载书签时):
$.address.externalChange(function(){
var favFruit = $.address.parameter("fav_fruit");
// Set any textboxes, values, etc
});
默认情况下,插件会在每次更新值时创建一个历史操作(因此您可以按后退/前进)。你不会想要这个,所以你必须在设置任何值之前拥有它:
$.address.history(false);
更新:这是在普通旧 JavaScript 中的样子:
// Stores name/value pairs that have changed
var updatedValues = [];
// Updates or adds an element to 'updatedValues'
function change(obj) {
updatedValues[obj.name] = obj.value;
setHash();
}
// Gets all the changes variables/values and sets the hash
function setHash() {
var arr = [];
for (x in updatedValues) {
arr.push(x + '=' + escape(updatedValues[x]));
}
location.hash = arr.join('&');
}
// Returns an object to return the values from the hash string
function readHash() {
var locationHashParts = location.hash.substr(1).split('&');
var params = {};
for (paramName in locationHashParts) {
var keypair = locationHashParts[paramName].split('=');
params[keypair[0]] = unescape(keypair[1]);
}
return params;
}
它不漂亮,但它有效。 change 是您设置要调用的表单元素,它将使用所需的位设置 URL 哈希。当您要设置表单字段中的值时(例如,当您加载页面时),您调用readHash 以获取具有location.hash 字段中所有参数/值的对象。
在http://jsfiddle.net/ENHFN/ 工作的示例(虽然您看不到位置哈希更改,但它使用了变量)。当我尝试将其分离出来时,我不断收到错误。