我在socketIO的.on函数调用的匿名函数中遇到了Jquery的问题,页面上的所有JS都在下面
$(document).ready(function(){
$('bar').fadeOut() // <---- this will work
socket.on("foo", function( obj ){
$('bar').html( obj ) // <---- this will work
$('bar').show() // <---- this will work
$('bar').fadeOut() // <---- this will NOT work
})
})
我真的很困惑为什么像fadeToggle()和slideDown()这样的Jquery方法在匿名回调中不起作用,但是会在它之外工作而其他方法都可以工作。
这是控制台错误消息
Uncaught TypeError: undefined is not a function jquery.js:4
hc jquery.js:4
ic jquery.js:4
kc jquery.js:4
g jquery.js:4
m.extend.dequeue jquery.js:3
(anonymous function) jquery.js:3
m.extend.each jquery.js:2
m.fn.m.each jquery.js:2
m.fn.extend.queue jquery.js:3
m.fn.extend.animate jquery.js:4
m.fn.(anonymous function) jquery.js:4
(anonymous function) test.js:21 <--- my code section
Emitter.emit socket.io.js:1295
Socket.onevent socket.io.js:806
Socket.onpacket socket.io.js:764
(anonymous function) socket.io.js:1020
Emitter.emit socket.io.js:1295
Manager.ondecoded socket.io.js:352
(anonymous function) socket.io.js:1020
Emitter.emit socket.io.js:1295
Decoder.add socket.io.js:4935
Manager.ondata socket.io.js:342
(anonymous function) socket.io.js:1020
Emitter.emit socket.io.js:1295
Socket.onPacket socket.io.js:1731
(anonymous function) socket.io.js:1548
Emitter.emit socket.io.js:1295
Transport.onPacket socket.io.js:2108
Transport.onData socket.io.js:2100
ws.onmessage
我的问题是发生了什么?这是某种范围问题吗?这个问题在哪里(我的代码,我的用途,Jquery)?
更新:Vikram Deshmukh建议引用我想在本地运行的jquery,其中一半是有效的。这是代码和效果。
var obj = $('bar').fadeOut() // <-- works, fades out early
var selected = $('bar')
$(document).ready(function(){
$('bar').fadeOut() // <---- same
socket.on("foo", function( obj ){
$('bar').html( obj ) // <---- same
$('bar').show() // <---- same
$('bar').fadeOut() // <---- same
obj // <--- this will work here
selected.fadeOut() // <--- this will FAIL, same error
})
})
如果......这可能是一个很好的答案。
答案 0 :(得分:1)
为什么不记得局部变量中对象的引用?这将解决由于范围不匹配而引起的任何问题。
$(document).ready(function(){
var bar = $('bar');
bar.fadeOut()
socket.on("foo", function( obj ){
bar.html( obj )
bar.show()
bar.fadeOut()
})
})