<a id="aHw" href="#" callbackName="helloworld">test</a>
...
<script>
function helloworld() { alert('hello world'); }
</script>
...
问题;如何生成callBack以传递另一个函数
<script>
...
var cbName = $('#aHw').attr('callbackName');
foo( passfunction ); //How???
...
</script>
<script>
function foo(callBack)
{
callBack(); // call hello world.
}
</script>
提前感谢。
答案 0 :(得分:3)
JavaScript中的函数只是一个对象。
这些问题对我来说并没有多大意义,但请考虑以下几点:
function fn1 () {
alert("fn1")
}
function doIt(cb) {
cb()
}
// direct -- to show point in general
// fn1 evaluates to the function-object, which is then passed
doIt(fn1)
// lookups up fn1 by name, then passes that function-object
// the value "fn1" can be any arbitrary string, such as that which
// was stored in the attr:
// e.g. doIt(window[cbName])
doIt(window["fn1"])
// anon function to iterate sameness
// the anon function returns a new function-object
doIt(function () { alert("anon") })
快乐的编码。
答案 1 :(得分:2)
确定。因此,要让一个锚在MouseOver上执行某些操作,您可以使用以下代码:
<a id="aHw" href="#" onmouseover="doSomething()">test</a>
您可以通过这种方式将函数传递给另一个函数:
function callSomeFunction( fn )
{
fn();
}
callSomeFunction( alert );
或者您可以将匿名函数传递给上述函数:
callSomeFunction( function(){ alert( "Finally! A message!" ); } );
如果你试图将一个函数的名称作为一个字符串传递(这是一个根本不好的想法和一个可怕的风险,很难调试, 不要做它 < / strong>),那么你可以使用eval:
function callNamedFunction( fn )
{
eval(fn)()
}
或者你可以逃脱:
function callNamedFunction( fn )
{
(window[fn])()
}
答案 2 :(得分:1)
foo( Function('return ' + cbName)() )
我认为这就是你的事后......
但如果它在浏览器中,并且您知道回调是一个全局对象,那么您可以这样做..
foo(window[cbName])
答案 3 :(得分:0)
好吧,如果没有其他帮助,eval()
将:
function foo( callBack ) {
eval( callBack + '()' );
}
答案 4 :(得分:0)
如果您知道函数的定义位置(例如window
或自定义命名空间),则可以通过字符串名称调用它。否则你必须eval
(坏主意)。另外,请使用data-attributes
。
<a href="#" data-callback="helloworld">test</a>
...
// invoke runs a function by name in the provided context, or window
function invoke(cbname, context){
return (context || window)[cbname].call();
}
// get attribute through the data method
var funcName = $('a').data('callback');
// run callback
var result = invoke(funcName);