socket IO anonymous .on()函数不能使用jquery

时间:2014-06-10 17:59:31

标签: javascript jquery socket.io

我在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
    })
})

如果......这可能是一个很好的答案。

  1. 我接受它的范围不匹配,好像是,我想知道怎么样?我以前做过这个。
  2. 不那么重要,但是如何做到这一点 var obj = $('bar')。fadeOut() 没有运行代码?

1 个答案:

答案 0 :(得分:1)

为什么不记得局部变量中对象的引用?这将解决由于范围不匹配而引起的任何问题。

$(document).ready(function(){
    var bar = $('bar');
    bar.fadeOut()             
    socket.on("foo", function( obj ){
        bar.html( obj )       
        bar.show()            
        bar.fadeOut()         
    })
})
相关问题