我是Javascript / jQuery的新手,我正在创建两个名为mapMTK
和keyAndDatatye
的对象,如下所示:
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);
});
上
我正在使用mapMTK[inputModuleName].length
一个jQuery click
事件,它给了我:
Uncaught TypeError: Cannot read property 'length' of undefined
在Javascript中使用相同的mapMTK[inputModuleName].length
可以正常工作。
<missing example>
我如何在我的jQuery代码中使用它?
答案 0 :(得分:0)
考虑一下:
var inputModuleName;
$('#clickme').click(function () {
alert(mapMTK[inputModuleName].length);
});
现在显而易见的是,inputModuleName
未定义,因此将mapMTK[inputModuleName]
。
只要这个功能
$('#formModuleName').change(function () {
inputModuleName = this.value;
});
尚未执行,inputModuleName
和mapMTK[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);