使用场景:
a.js调用onFunction函数:
onFunction(mycb);其中,mycb是a.js实现的一个回调函数,比如:
function mycb()
{
alert("mycb");
}onFunction函数实现在b.js里面。
function onFunction(cb)
{
var pp = "<div id='test' cb='" + cb +"'>";
pp += "</div>";
}当b.js执行某个操作后,调用此回调函数。function onBtnClicked()
{
var cbFun = $("#test").attr('cb');
cb(2);
}运行结果并未执行到mycb函数里面。
仔细看过,是因为传递到onFunction函数是,cb的值为整个函数实现的字符串。有人知道,应该如何实现这样的功能么?
a.js调用onFunction函数:
onFunction(mycb);其中,mycb是a.js实现的一个回调函数,比如:
function mycb()
{
alert("mycb");
}onFunction函数实现在b.js里面。
function onFunction(cb)
{
var pp = "<div id='test' cb='" + cb +"'>";
pp += "</div>";
}当b.js执行某个操作后,调用此回调函数。function onBtnClicked()
{
var cbFun = $("#test").attr('cb');
cb(2);
}运行结果并未执行到mycb函数里面。
仔细看过,是因为传递到onFunction函数是,cb的值为整个函数实现的字符串。有人知道,应该如何实现这样的功能么?
解决方案 »
- 使用css的display控制div显示和隐藏怎么写
- 在文档中显示一行文字“改变状态栏上的文字”,鼠标移上去,在状态栏上显示“鼠标已经移上去”,鼠标移下走,在状态栏上显示“鼠标已经移走”
- 用JS可不可以同时关闭多个窗口?
- 昨天做了个AJAX的东西,遭到高手责骂说我这个虐待服务器.
- 我想知道这两段代码问题是出现在哪里的??
- 关于弹出框中Iframe的性能问题
- thead的问题
- meizz !!!!你好 我用了一个你的时间控件,但我不知道如何更改默认显示时间.
- [求助]VB里的函数ubound,在JS里有没这样的函数?
- 浏览器关闭事件
- 关于刷新数据库会增加空数据的问题
- 如何实现当浏览器大小变化时,图片也跟着按比例缩放
onFunction在哪里调的,看着好晕
{
var cbFun = $("#test").attr('cb');
eval(cbFun);
cb(2);
}
这样就ok了
这是一种什么样的垃圾写法,我就不说了给你换一下:
window.cb=mycb;
把这句放a.js里面
b.js里面
function onBtnClicked()
{
window.cb();
}
b.js其实是一个公用的js。里面的onFunction函数就是一个公用的函数。
a.js只是其中一个调用者,可能还有c.js,d.js会调用onFunction函数,参数分别是各自实现的函数指针。
之所以将cb函数指针放到div里面就是保存调用者的这个函数指针。因为有很多调用者,根本无法知道预先有多少个,也无法使用全局变量。我刚试过了,wzs_xyz的eval方法不行。或者没写对?问此问题前,我已经在网上搜过很多了,eval其实我试过,不行的。不知道你们试过没有。
window.cb就更不行了,因为相当于使用了全局变量。第二个调用者,会冲调第一个的。
onFunction只是保存调用者函数地址,要在某个相应事件的执行函数里面才能调用的。
现在的问题,就是保存时不对,或者获取函数地址不对。导致回调不出去。如果直接在onFunction里面回调,是可以的。但程序执行流程不能这么做。
function mycb(fun)
{
fun();
}mycb(function(){alert("匿名函数");});
cb(2);//这个cb是啥米东东?我愣是没看明白
你这种写法确实很差劲这个不用怀疑
把函数这样就到字符串里只能是得到该对象toString方法的返回值,所以是代码字符串,不是指针.js函数是引用类型,函数名自身就是指针,你这么自信的非要认为你的方法才可以,大家有什么办法function onBtnClicked()
{
var cbFun = $("#test").attr('cb');
eval("var cb="+cbFun);
cb(2);
}
这样写,除非你的函数本来就是错的,否则是肯定能执行的
var cbFun = $("#test").attr('cb') + '();';
eval(cbFun);
一点需要主要的是:我的程序实现不允许使用全局变量。如果a.js调用了window.callback,将这个回调函数的地址保存下来了。在回调之前,b.js又调用了window.callback,此时a.js还能回调进去么?难道window.callback不是一个全局函数?支持多实例?
不要怀疑我的回调函数有问题。不考虑多实例的情况下,使用全局变量是肯定可以调进去的。就是要保证多实例能使用,才不能使用全局变量。所以,需要为每个调用者,创建一个div object(这个本来就回创建),然后将回调函数的地址保存下来,这样,需要回调的时候,再取出函数地址,进行回调。我觉得这样的实现,应该没问题。或者有更好的实现方式么?
毛线的个不用全局变量,你都用了html来保存参数了,还说没用全局变量,html不是全局的???
回调函数的话,我现在的工作就是开发js技术支持和js组件开发,你说我明不明白? 至于你说的window.callback,从没听说过有这个函数
我也不想和你讨论你那方法了,爱杂用咋用吧,不关我事
开发可供多个地方调用的组件,是必须有一个全局的变量供调用的,
当然,不管多少函数,可以只占据一个全局变量名,
该全局变量名是一个对象,你要写的所有函数都可以作为该对象的成员,这也就是所谓的命名空间,
应用中还可以在该命名空间上继续扩展下级的命名空间,
当然全局对象上的成员实质也都是全局变量,但放一个对象上就可以避免命名冲突而且也显得规范
jquery在全局占用的变量名是$和jQuery,extjs占用的是Ext,
其他不同的库也都占用至少一个全局变量名(命名空间)
你说的函数在其他多个地方要调用,所以不能写成全局的,实在是让人觉得荒谬
你就写一个window.test=function(){alert(0);}(只在一个地方定义就可以了,重复定义变量才会导致前面的被覆盖,自己想想是不是多个文件都定义了你的函数导致前面的被覆盖),
然后在多个js文件中调用,自己看它是不是就被冲掉了!
你可能因为基础不够,写的代码不严密,导致了你描述的现象,
这个需要自己调试,程序编写要能灵活变通,但也要严密,要注重基础,
出问题的时候一定先网上搜一搜,
不要就先想当然认定了一个原因,就去想办法变通!特别是没有掌握的东西
变通实现只在确认常规方法不能实现的时候才用