BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #12734同步于 2011/3/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

一个js相关的问题=。=

oooooo
2011/3/31镜像同步9 回复
function f(file){ var totalLines=0; $.get('countLine.do?file='+file,function(data){ totalLines=data; }); } 这样写有没有问题? data的值是能够取到的 但是执行完totalLines的值还是0 怎么样才能让totalLines取到data里面的值?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zzcc机器人#1 · 2011/3/31
执行完之后totalLines的确是变了。不过是局部变量,取不到而已。。 你的目的是在$.get后面使用totalLines的值是吗? 在这个地方,$.get只是注册了一个回调函数,只有当页面返回了才会执行,所以totalLines并不是立即改变的。 应该把后续代码放在回调function中
oooooo机器人#2 · 2011/4/1
function f(file){ var totalLines=0; $.get('countLine.do?file='+file,function(data){ totalLines=data; $('#source').load(url); var div=document.getElementById("source"); div.scrollTop=div.scrollHeight*(line/totalLines); }); } 按照你说的,我把后面的代码放到回调函数里了 但是现在又出现了一个问题: 我是给<tr>加了一个onclick方法来触发这个事件的, 但是点击一次之后,$('#source').load(url);这句执行了 而div的滚动条却没有发生变化,在第二次点击之后才会变,这是为啥? 【 在 zzcc (足兆叉虫 <中立生物>) 的大作中提到: 】 : 执行完之后totalLines的确是变了。不过是局部变量,取不到而已。。 : 你的目的是在$.get后面使用totalLines的值是吗? : 在这个地方,$.get只是注册了一个回调函数,只有当页面返回了才会执行,所以totalLines并不是立即改变的。 : ...................
zzcc机器人#3 · 2011/4/1
因为load又是一个回调。。。 当没有load完之前,滚动条高度还是0... 所以。。你需要再把load后面的代码放在load的回调中。。 【 在 oooooo 的大作中提到: 】 : function f(file){ : var totalLines=0; : $.get('countLine.do?file='+file,function(data){ : ...................
oooooo机器人#4 · 2011/4/1
赞~终于搞定了…… 【 在 zzcc (足兆叉虫 <中立生物>) 的大作中提到: 】 : 因为load又是一个回调。。。 : 当没有load完之前,滚动条高度还是0... : 所以。。你需要再把load后面的代码放在load的回调中。。 : ...................
wks机器人#5 · 2011/4/1
这样如何? <head> <script type='text/javascript'> var globalState = { totalLines: 0 }; function f(file){ $.get('countLine.do?file='+file,function(data){ globalState.totalLines = data; }); } </script> </head>
yqiao2007机器人#6 · 2011/4/1
【 在 wks 的大作中提到: 】 : 这样如何? : <head> : <script type='text/javascript'> : ................... 为什么要把变量封装在一个json里面呢,难道是为了实现一个统一的存放全局变量的对象?
zzcc机器人#7 · 2011/4/1
我猜是命名空间 【 在 yqiao2007 的大作中提到: 】 : : 这样如何? : : <head> : : <script type='text/javascript'> : ...................
wks机器人#8 · 2011/4/1
其实没必要吧。对Javascript的作用域不太熟悉,怕全局变量不能在函数里修改。 如果是Python,只要函数里对一个变量进行写操作,这个变量就是局部变量,如: >>> a=9 # 定义全局变量 >>> def g(): #函数g仅仅读取a,所以a指的是全局的a print a >>> def f(x): #函数f写了a,所以这个a是f的局部变量 a=x >>> g() 9 >>> f(18) # 这个函数其实没有副作用 >>> a 9 >>> 但是,想要写全局变量,在函数里用global关键字就可以: >>> def h(x): global a # 说明这个函数里用的a是全局的a a=x >>> h(18) # 有副作用 >>> a 18 javascript里这样行不行: <head> <script type='text/javascript'> var totalLines=0; function f(file){ $.get('countLine.do?file='+file,function(data){ totalLines = data; }); } </script> </head> 【 在 yqiao2007 的大作中提到: 】 : : 这样如何? : : <head> : : <script type='text/javascript'> : ...................
zzcc机器人#9 · 2011/4/2
Javascript的作用域和python是一样的,函数内就是闭包 不同的是,javascript的变量需要声明,若不var,变量就是全局变量。 【 在 wks 的大作中提到: 】 : 其实没必要吧。对Javascript的作用域不太熟悉,怕全局变量不能在函数里修改。 : 如果是Python,只要函数里对一个变量进行写操作,这个变量就是局部变量,如: : >>> a=9 # 定义全局变量 : ...................