【问题标题】:jQuery: Is another solution possible?jQuery:是否有另一种解决方案?
【发布时间】: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


【解决方案1】:

请尝试

window.location.href = retVal;

而不是

window.location = '...'

如果您不希望上一个网址进入浏览器历史记录,请尝试

window.location.replace(retVal)

希望这会有所帮助。

【讨论】:

  • location.replace 是一个函数,而不是一个标量属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
相关资源
最近更新 更多