我正在尝试调用变量函数名称,因为我在使用here中的类似代码之前已经多次使用
<script type="text/javascript">
$.fn.toggleHeightAndOpacity = function(show) {
$(this).stop(true,false).animate({
opacity: (show)?'show':'hide',
height: (show)?'show':'hide'
},
function(){
$(this).css('display', (show)?'auto':'none')
})
};
...
ws.onmessage = function (evt) {
var data = JSON.parse(evt.data);
if(evt.data.type = 'function'){
var parameters;
try{
parameters = JSON.parse(data.parameters);
}
catch(e)
{
parameters = data.parameters;
}
$('#'+data.id)[data.function](parameters)
}
};
但即使从我的WebSocket服务器返回的JSON为Uncaught TypeError: Property '$.fn.toggleHeightAndOpacity' of object [object Object] is not a function
,我仍然会收到{"function":"$.fn.toggleHeightAndOpacity","id":"container","parameters":true,"type":"function"}
。
container
存在于我的html中,并加载了jQuery。
如何解决这个问题?
答案 0 :(得分:2)
可以使用点或括号表示法访问对象,因此这两个是相同的
object.key
object['key']
由于jQuery选择器和方法是对象,就像javascript中的其他所有东西一样,它们可以以相同的方式访问,所以这两个是相同的
$('#element').fadeIn();
$('#element')['fadeIn']();
这意味着可以使用这两种方法访问插件
$('#'+data.id)['toggleHeightAndOpacity'](parameters);
$('#'+data.id).toggleHeightAndOpacity(parameters);
因此,如果从服务器返回的数据确实是
{"function":"$.fn.toggleHeightAndOpacity", ...
你真的在做
$('#'+data.id)['$.fn.toggleHeightAndOpacity'](parameters)
这看起来不对,应该是
$('#'+data.id)['toggleHeightAndOpacity'](parameters)
所以更改服务器端代码以输出不带$.fn
的函数名称
使用function
作为键看起来有点暗淡,因为它是javascript中的保留关键字,所以我习惯于不命名键或变量function