Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击事件时无法读取未定义的属性“length”_Javascript_Jquery - Fatal编程技术网

Javascript 单击事件时无法读取未定义的属性“length”

Javascript 单击事件时无法读取未定义的属性“length”,javascript,jquery,Javascript,Jquery,我是Javascript/jQuery的新手,我正在创建两个名为mapMTK和keyAndDatatye的对象,如下所示: HTML 在 我正在使用mapMTK[inputModuleName].length和它提供给我的jQuery click事件: Uncaught TypeError: Cannot read property 'length' of undefined 使用相同的mapMTK[inputModuleName]。Javascript中的长度可以正常工作 <missi

我是Javascript/jQuery的新手,我正在创建两个名为mapMTK和keyAndDatatye的对象,如下所示:

HTML

我正在使用mapMTK[inputModuleName].length和它提供给我的jQuery click事件:

Uncaught TypeError: Cannot read property 'length' of undefined
使用相同的mapMTK[inputModuleName]。Javascript中的长度可以正常工作

<missing example>

如何在我的jQuery代码中使用它?

看起来您正在尝试查找对象的长度,除非它是数组对象,否则将无法工作:

var obj = {a:1, b:2, c:3};  //undefined
var arr = ['a', 'b', 'c']; // 3

alert(obj.length);
alert(arr.length);
考虑这一点:

var inputModuleName;

$('#clickme').click(function () {
    alert(mapMTK[inputModuleName].length);
});
现在很明显,inputModuleName是未定义的,因此将是mapMTK[inputModuleName]

只要这个函数

$('#formModuleName').change(function () {
    inputModuleName = this.value;
});
尚未执行,inputModuleName和mapMTK[inputModuleName]未查找。

更改您的:

var inputModuleName;

$('#formModuleName').change(function () {
    inputModuleName = this.value;
});

$('#clickme').click(function () {
    alert(mapMTK[inputModuleName].length);
});


1.如果JS告诉你一些东西是未定义的,那就是。没有理由不信任JS2。JS对象没有.length属性well,输入定义在哪里?事实上,您正在讨论的jQuery代码在哪里?我想说,回到基本的JS教程,带着所有的良好意图。请在此处查看,它可以正常工作,但在我的代码中没有。在更改下拉列表之前,inputModuleName是未定义的。它是一个以数组作为属性的对象mapMTK[inputModuleName]。length尝试获取分配给该属性的数组的长度。因此,您误导了OP。在您的小提琴中,只有第一个选项不起作用,因为在触发onChange事件之前,您不会设置inputModuleName。请尝试此操作以确保始终捕获选定的选项。
$('#formModuleName').change(function () {
    inputModuleName = this.value;
});
var inputModuleName;

$('#formModuleName').change(function () {
    inputModuleName = this.value;
});

$('#clickme').click(function () {
    alert(mapMTK[inputModuleName].length);
});
$('#clickme').click(function () {
    var inputModuleName = $('#formModuleName').val();
    alert(mapMTK[inputModuleName].length);
});