【问题标题】:Strange Javascript / jQuery Issue - Assigning and reading values奇怪的 Javascript / jQuery 问题 - 分配和读取值
【发布时间】:2017-01-12 15:05:57
【问题描述】:

我使用 jQuery 已经有 2 年了,我知道这很简单,我以前做过很多次,但由于某种原因,我今天似乎无法让它工作,所以我在这里发帖。这是我剪掉的 Javascript 代码:

(function () {

        // checking for query strings
        var vars = [], hash;
        var q = document.URL.split('?')[1];
        if (q != undefined) {
            q = q.split('&');
            for (var i = 0; i < q.length; i++) {
                hash = q[i].split('=');
                vars.push(hash[1]);
                vars[hash[0]] = hash[1];
            }
        }
        // end query string check

        // using query strings above to perform operations
        if (typeof (vars['grade']) != "undefined") {
            alert(vars['grade']);
            $('#divGrade').html(vars['grade']);
        }

        alert($('#divGrade').html());

    })();

我在页面上有一个 div 标签: &lt;div id="divGrade" &gt;&lt;/div&gt;

查询字符串为:default.html?grade=0

javascript 读取等级,即 0,然后使用“警报”将其显示给用户,然后将其分配给 div 标签。当试图提醒用户 div 标签的 html 时,它是“未定义的”。

我一直盯着这个,我知道我在做的事情很愚蠢。关于它可能是什么的任何想法?

【问题讨论】:

  • 我怀疑这部分 vars.push(hash[1]);变量[哈希[0]] =哈希[1];您正在将 [1] => 值添加到数组,然后尝试按键设置
  • 您使用 (function() { ... })(); 是不是要使用 $(function() { ... });alert($('#divGrade').length) 有什么用(即它是否在页面上当您运行代码时?)
  • 你的代码没问题,问题是Document.URL不包含搜索参数。做一个console.log(document.URL); 他们可以在window.location.search 中找到,在上面做一个console.log(window.location.search) 看看你会得到什么。
  • @Fran 它们被包括在内(至少在 Chrome 中)。 ((location.href == document.URL) == true)
  • @Fran 好的,如果您的 location.href 也不包含搜索,我的示例不是很有帮助 - 但是它应该。如果 plunkr 像 jsfiddle 一样工作,那么它无论如何都不会进行任何搜索(猜测) - 在真实网站的控制台中尝试它(具有 ? ofc)。 OP 确实提到用户的搜索值为alertd,所以那时可能还可以。

标签: javascript jquery html query-string


【解决方案1】:

问题是。

1:您尝试在 vars 上使用对象括号表示法,但它是一个数组。将其更改为对象。

(function() {

  // checking for query strings
  var url = "default.html?grade=0";
  var vars = {},
    hash;
  var q = url.split('?')[1];
  if (q != undefined) {

  
      q = q.split('&');

      for (var i = 0; i < q.length; i++) {
        hash = q[i].split('=');
         
         vars[hash[0]] = hash[1];
      }
  }
  // end query string check

  // using query strings above to perform operations
  if (typeof(vars['grade']) != "undefined") {
    alert(vars['grade']);
    $('#divGrade').html(vars['grade']);
  }

  alert($('#divGrade').html());

})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="divGrade"></div>

【讨论】:

  • 哎哟.. 无缘无故投反对票?
  • 您没有看到对其他问题的所有反对意见,没有评论吗? (不是我)
  • hmmm 连续投反对票 :)
【解决方案2】:
// checking for query strings 
var vars = {},
  hash;
var q = document.URL.split('?')[1];
if (q != undefined) {
  q = q.split('&');
  for (var i = 0; i < q.length; i++) {
    hash = q[i].split('=');
    vars[hash[0]] = hash[1];
  }
}

Vars["grade"] 要求 vars 是对象而不是数组。对象没有推送功能。

【讨论】:

  • 请在 JSFiddle 或类似代码中测试 OPs 代码,并检查有关问题的 cmets 以获得可能的解释。
  • 你能不能让它工作,我不能让它工作。
  • 答案不得包含完整的工作示例。我在用户代码中发现了一个重大错误,并花时间写了一个答案。投票是不公平的,除非代码/答案的内容有误
  • 没有投反对票,但这部分“javascript读取等级,即0,然后用“alert”将其显示给用户”表示您提供答案的区域不是问题所在的区域。
  • @freedomn-m 再次。不是。 A. 完整答案。
【解决方案3】:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("button").click(function(){
        $("input:text").val("Glenn Quagmire");
    });

   $('#myselect').change(function() {
            alert($(this).val());
      });
});
</script>
</head>
<body>

<p>Name: <input type="text" name="user"></p>

<button>Set the value of the input field</button>


<select id="myselect">
    <option value="1">Hello</option>
    <option value="2">Ram</option>
    <option value="3">david</option>
    <option value="4">Scott</option>
    <option value="5">Prof</option>
</select>

enter code here

</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    相关资源
    最近更新 更多