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

时间:2014-02-13 22:53:46

标签: javascript jquery

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

HTML

<div class="control-group">
    <label class="control-label" for="templ">Module Template Name</label>
    <div class="controls">
        <select id="formModuleName" name="DSname" class="input-large">
            <option>TitleImageModule</option>
            <option>SearchBoxModule</option>
            <option>CategoryLinksModule</option>
            <option>BannerSlidesModule</option>
            <option>StoreNavigationModule</option>
        </select>
    </div>
</div>
<button id="clickme">click me</button>

的Javascript

function keyAndDatatype(key, datatype) {
    this.key = key;
    this.datatype = datatype;
}

var mapMTK = {};

mapMTK["TitleImageModule"] = [
    new keyAndDatatype("title", "ImageObj")
];

mapMTK["SearchBoxModule"] = [
    new keyAndDatatype("searchBox", "LinkObj")
];

mapMTK["CategoryLinksModule"] = [
    new keyAndDatatype("subStores", "LinkObj"),
    new keyAndDatatype("title", "TextObj")
];

mapMTK["StoreNavigationModule"] = [
    new keyAndDatatype("anchorTags", "ImageLinkObj"),
    new keyAndDatatype("titleImage", "ImageObj"),
    new keyAndDatatype("title", "TextObj")
];

var inputModuleName;

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

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

jsFiddle

我正在使用mapMTK[inputModuleName].length一个jQuery click事件,它给了我:

Uncaught TypeError: Cannot read property 'length' of undefined

在Javascript中使用相同的mapMTK[inputModuleName].length可以正常工作。

<missing example>

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

3 个答案:

答案 0 :(得分:0)

考虑一下:

var inputModuleName;

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

现在显而易见的是,inputModuleName未定义,因此将mapMTK[inputModuleName]

只要这个功能

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

尚未执行,inputModuleNamemapMTK[inputModuleName]无法解决。

答案 1 :(得分:0)

改变你的:

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);
});

答案 2 :(得分:-1)

看起来你正试图找到一个对象的长度,除非它是一个数组对象,否则它将不起作用:

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

alert(obj.length);
alert(arr.length);