2016-12-19 71 views
-1

屬性「容器」我有一個點擊功能按鈕如下圖所示:遺漏的類型錯誤:無法讀取的不確定

$('.toggler').click(function() { 
    var id = $('.song-top > div').data('track-id'); 
    var wid = 'width'+id; 
    var wav = 'wavesurfer'+id; 
    wid = $(this).width(); 
    wav.drawer.containerWidth = wav.drawer.container.clientWidth; 
    wav.drawBuffer(); 
}); 

使用jQuery 2.1.3 var id回到正確的數字,那麼爲什麼我得到這個錯誤安慰?

Uncaught TypeError: Cannot read property 'container' of undefined

但是如果我手動設置id數它的工作原理:

$('.toggler').click(function() { 
    width268 = $(this).width(); 
    wavesurfer268.drawer.containerWidth = wavesurfer268.drawer.container.clientWidth; 
    wavesurfer268.drawBuffer(); 
}); 
+0

你在哪兒定義了'container'和'wav'? –

+4

'wav'正在分配一個字符串,它不是一個對象? – BenM

+1

你有'var wav ='wavesurur'+ id;'然後你有'wav.drawer.containerWidth = ...'你有沒有給'String.prototype'增加一個'drawer'屬性?因爲'wav'是指一個字符串。 –

回答

1

它看起來像你覆蓋wav回調中:

$('.toggler').click(function() { 
    var id = $('.song-top > div').data('track-id'); 
    var wid = 'width'+id; 
    var wav = 'wavesurfer'+id; // <--- overwrite?? 
    wid = $(this).width(); 
    wav.drawer.containerWidth = wav.drawer.container.clientWidth; 
    wav.drawBuffer(); 
}); 

我想你需要改變變量名稱爲wave或其他不同的名稱。如果你確實想分配wavesurfer1對象爲wav,您可以使用以下(假設你的wavesurfer1對象是window範圍):

var wav = window['wavsurfer'+id]; 
+0

是否有機會設置像'波浪衝浪者'+我的'ID'的對象? – NineCattoRules

+0

你是什麼意思? – BenM

+0

你希望根據你在這裏創建的動態名稱來分配'wav'對象嗎? – BenM

1

您的變量wav不是一個複雜的對象,這是一個字符串,在下面一行聲明:

var wav = 'wavesurfer'+id; 

您試圖訪問一個名爲drawer你的字符串的屬性,但它不存在,所以drawerundefined。當您嘗試使用drawer.container時,您的drawerundefined,因此引發異常。

對於你說它正在工作的那段代碼,你使用了一個不同的對象wavesurfer268,它可能具有正確的屬性。

+0

你不能說「wavesurur268」是一個基於OP帖子的字符串,它沒有在那裏聲明或覆蓋。所以,我認爲這是一個複雜的對象 – Stormhashe

+0

我錯寫了「ID」,已經編輯過。我的意思是「字符串」。 – Stormhashe

+0

太棒了!但是也可能值得注意'null'和'undefined'之間的區別(它們在JS中非常大!) – BenM

相關問題