jQuery:另一种解决方案可能吗?

时间:2014-11-12 11:04:33

标签: javascript jquery linux chromium

我尝试使用jQuery注册一个onClick-handler,其功能应该是更改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并说我也使用了bootstrap。 顺便说一句,我自己发现了这个bug,但谢谢你的帮助。

<!-- 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 -->

&#34; href&#34; -attributes是空的,这是我的错。 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);
}

新函数用新URL替换指定的&#34; href&#34; -attribute(参数&#34; id&#34;)的值。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

请尝试

window.location.href = retVal;

而不是

window.location = '...'

如果您不想以前的网址转到浏览器历史记录,请尝试

window.location.replace(retVal)

希望这有帮助。