未捕获的TypeError:无法使用值作为数组键读取未定义的属性“1”

时间:2016-10-07 11:46:17

标签: javascript jquery

我想更改名为<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.1/moment.min.js"></script> <script> //for desktop mobile display date today window.onload = function(){ var dateverify = document.getElementById("dateToday"); var desktopDate = function(){ //for desktop var a = moment().format('LL'); document.getElementById("dateToday").innerHTML = a; } var tabletDate = function(){ //for tablet var b = moment().format('LL'); document.getElementById("datedate").innerHTML = b; } if(dateverify !== null){ desktopDate(); } else{ tabletDate(); } } </script> 的输入的值,我想在其中添加websitemod的值,其中tab[var][1]会根据下拉列表中的哪个选项进行动态更改菜单已被选中。但是,每次我放var时,我都会收到错误(var val = $(this).val(); tab[val][1]),当我执行Uncaught TypeError: Cannot read property '1' of undefined时,它会有效。我假设我为var = 12; tab[val][1]赋值的jQuery函数不起作用。你有什么想法吗?

功能本身:

val

标签,如果您需要:

$(document).ready(function () {

    // everytime the dropdown changes
    $('select[name=modservmenu]').change(function () {
        var val = $(this).val();

       // changes the value of the input
       $('input[name=websitemod]').val(tab[val][1]);
    });

})

编辑:

按照评论中的建议更改了数组,var tab = [ ['10', ''], ['4', ''], ['8', ''], ['9', ''], ['11', ''], ['3', ''], ['2', ''], ['1', ''], ['6', ''], ['5', ''], ['7', ''], ['12', 'test.fr'], ]; 它确实是我猜的

parseInt

3 个答案:

答案 0 :(得分:1)

这里缺少的是,您无法通过单元格单元格的值访问数组的单元格。你的“val”也是一个字符串,但“tab”是一个数组,所以它使用索引,索引是整数。您可以通过它的索引(如array [0])访问数组。所以你对“索引”&lt; - &gt;感到困惑“值”

详细地说,假设您想要获取元素“12”并且您正在访问它,就像数组[12]但它的索引是“11”,因此您可以通过它的索引访问它,如数组[11] - - &GT;给你“[”12“,”test.fr“]”然后你可以使用这个数组对象。样品:

//let's say value is 12
tab["12"] --> null

//let's get the array contains value "12"
tab[11] --> ["12", "test.fr"],
//let's access to "test.fr"
tab[11][1] --> "test.fr"

并且,此null对象索引“1”未定义,因此您收到错误“ Uncaught TypeError:无法读取未定义的属性'1'

tab["12"][1] //--> Uncaught TypeError: Cannot read property '1' of undefined

您的tab对象不是地图,因此您无法通过“字符串”值访问它。所以你必须创建一个像下面这样的对象来通过文本索引访问它,之后,你可以访问一个数组索引(你想要的索引):

var tab = {
        '10' : ['', ''],
        '4': ['', ''],
        '8': ['', ''],
        '9': ['', ''],
        '11': ['', ''],
        '3': ['', ''],
        '2': ['', ''],
        '1': ['', ''],
        '6': ['', ''],
        '5': ['', ''],
        '7': ['', ''],
        '12': ['', 'test.fr'],
        };

$(document).ready(function () {

    // everytime the dropdown changes
    $('select[name=modservmenu]').change(function () {
        var val = $(this).val();

       // changes the value of the input
       $('input[name=websitemod]').val(tab[val][1]);
    });

})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="modservmenu">
  <option>10</option>
  <option>12</option>
</select>

<input type="text" name="websitemod"/>

或者,您可以使用您的阵列并像这样搜索:

var tab = [
        ['10', ''],
        ['4', ''],
        ['8', ''],
        ['9', ''],
        ['11', ''],
        ['3', ''],
        ['2', ''],
        ['1', ''],
        ['6', ''],
        ['5', ''],
        ['7', ''],
        ['12', 'test.fr'],
        ];

$(document).ready(function () {

    // everytime the dropdown changes
    $('select[name=modservmenu]').change(function () {
        var val = $(this).val();
  
        for (var i = 0; i < tab.length; i++) {
          if (tab[i][0] == val) {
            $('input[name=websitemod]').val(tab[i][1]);
            break;
          }
        }
    });

})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="modservmenu">
  <option>10</option>
  <option>12</option>
</select>

<input type="text" name="websitemod"/>

答案 1 :(得分:1)

在评论中你说:

  

下拉菜单中使用的值来自数据库中的ID自动递增。目前1至12日。

好的,这意味着I guessed right,您无法使用val直接索引到tab数组中。相反,您需要在tab数组中找到以val作为第一个参数的条目。幸运的是,数组只有find

var entry = tab.find(function(e) { return e[0] == val; });

请注意,Array#find相对较新,但can be polyfilled on older browser

var tab = [
  ['10', ''],
  ['4', ''],
  ['8', ''],
  ['9', ''],
  ['11', ''],
  ['3', ''],
  ['2', ''],
  ['1', ''],
  ['6', ''],
  ['5', ''],
  ['7', ''],
  ['12', 'test.fr'],
];

$(document).ready(function() {

  // everytime the dropdown changes
  $('select[name=modservmenu]').change(function() {
    var val = $(this).val();

    // changes the value of the input
    var entry = tab.find(function(e) { return e[0] == val; });
    if (entry) {
      $('input[name=websitemod]').val(entry[1]);
    }
  });

})
<select name="modservmenu">
  <option value="2">Two</option>
  <option value="12">Twelve</option>
</select>
<input name="websitemod">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 2 :(得分:-4)

你不应该使用&#39; var&#39;作为变量名称,它是javascript中的保留关键字(可能它不在您的脚本中,只在您的帖子中)

检查数组键的类型。

services.AddScoped<IMyInterface, MyService>();
services.AddSingleton<IYourInterface, YourService>();

可能与

不同
tab[12][1]

也许你只需要

tab['12'][1]