2016-12-19 73 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

相关问题