2014-02-13 35 views
0

我是一個完全新的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代碼中使用它?

+1

1.如果JS告訴你的東西是不確定的 - 它是。沒有理由不信任JS 2. JS對象沒有「.length」屬性, – zerkms

+0

那麼,輸入定義在哪裏?事實上,這個'jQuery'代碼在哪裏呢? –

+4

回到基本的JS教程,我想說,所有的最好的意圖。 – kapa

回答

0

考慮一下:

var inputModuleName; 

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

現在很明顯,inputModuleName未定義,因此將是mapMTK[inputModuleName]

只要這個功能

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

還沒有被執行,inputModuleNamemapMTK[inputModuleName]是undefind。

-1

它看起來像你試圖找到一個對象的長度,不會,除非其工作的一個數組對象:

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

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

它的一個數組作爲屬性的對象'mapMTK [inputModuleName] .length'嘗試獲取分配給該屬性的數組長度。所以你誤導了OP。 –

+0

在你的小提琴中,只有第一個不起作用,因爲直到onChange事件被觸發,你才設置inputModuleName。 – 4m1r

+0

請嘗試此操作以確保始終捕獲選定的選項。 http://jsfiddle.net/hmb2v/4/ – 4m1r

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); 
}); 
相關問題