【发布时间】:2014-06-10 17:59:31
【问题描述】:
我在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
})
})
如果...,这可能是一个很好的答案
- 我接受它是范围不匹配,看起来是这样,但我想知道如何?我以前做过。
- 不那么重要,但如何做到这一点 var obj = $('bar').fadeOut() 不运行代码?
【问题讨论】:
-
.fadeOut() 在匿名函数之外工作??正确的?你仔细检查了吗?
-
您确定 on() 正在触发吗?尝试控制台日志。我怀疑只有第一个淡出(准备好的)正在触发。我可能是错的。另外,你为什么使用“bar”标签而不是html标签?
-
是的,如果我有一个警报(“asdasdasd”)它会触发
-
和@Scott Selby,是的,我觉得这很奇怪
-
和它的父母一起试试
标签: javascript jquery socket.io