【发布时间】:2014-11-12 11:04:33
【问题描述】:
我尝试使用 jQuery 注册一个 onClick 处理程序,其功能应该是更改 URL 中的查询字符串并在我为 window.location.href 分配一个新 URL 时启动重新加载。
// sets a new URL with lang as query parameter indicating the language
setNewLang: function( lang ) {
var that = this;
// the url that shall be changed
var url = window.location.href;
// save possible other query parameters
var tokenizedUrl = url.split("&");
// first string in the array contains language query parameter
var tokenZero = tokenizedUrl[0].split("l=");
// set the new language query parameter in the first part of the url
tokenizedUrl[0] = tokenZero[0] + "l=" + lang;
// concatenate the splitted url
var retVal = tokenizedUrl[0];
for(i=1; i<tokenizedUrl.length; i++) {
retVal = retVal + "&" + tokenizedUrl[i];
}
console.log(retVal);
// reload page with new query parameter for language
window.location = retVal;
return false;
}
/* language selection for navbar-right*/
$("#navbarRightLanguageListEnglish").on("click", function() {
console.log("DBG-INFO"); /* even the log never appears */
that.setNewLang("en_US");
});
我用firefox试了一下,效果很好。 铬有缺陷吗?还是范围或jQuery或...的问题? 如果有另一种解决方案可用于更改和重新加载网站,我会很高兴知道。
感谢您的帮助。
大家好!
我忘记发布 HTML 并说我也在使用引导程序。 顺便说一句,我自己发现了这个错误,但感谢您的帮助。
<!-- Language Selection -->
<div id="navbarTopLanguage" class="dropdown dd-top">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" >Language<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
<li id="navbarTopLanguageListEnglish" role="presentation"><a role="menuitem" tabindex="-1" href="">English</a></li>
<li id="navbarTopLanguageListDeutsch" role="presentation"><a role="menuitem" tabindex="-1" href="">Deutsch</a></li>
</ul>
</div>
<!-- End of Language Selection -->
“href”属性是空的,这是我的错。 Chromium 为它们提供了(错误的)值,因此单击它不会产生想要的效果。
我通过更改 javascript 修复了它。
// sets a new URL with lang as query parameter indicating the language
setNewLang: function( id, lang ) {
// selfie-pattern
var that = this;
// the url that shall be changed
var url = window.location.href;
// save possible other query parameters
var tokenizedUrl = url.split("&");
// first string in the array contains language query parameter
var tokenZero = tokenizedUrl[0].split("l=");
// set the new language query parameter in the first part of the url
tokenizedUrl[0] = tokenZero[0] + "l=" + lang;
// concatenate the splitted url
var retVal = tokenizedUrl[0];
for(i=1; i<tokenizedUrl.length; i++) {
retVal = retVal + "&" + tokenizedUrl[i];
}
console.log(retVal);
// reload page with new query parameter for language
$(id).attr("href",retVal);
}
新函数将指定的“href”属性(参数“id”)的值替换为新的 URL。
感谢您的帮助。
【问题讨论】:
-
请同时显示您的 HTML(以及完整的脚本块)。
-
如果日志从未出现,则点击处理程序未运行。有什么错误吗? setNewLang 被定义为对象,周围的代码在哪里?如果它不是对象的一部分,请使用函数 setNewLang(lang){} 。 'that' 在点击处理程序中没有作用域。
标签: javascript jquery linux chromium