example
可能一切都很清楚
我需要通过点击data-fn
来改变将要执行的功能。
当前函数应存储在ZipFile
。
任何帮助?
答案 0 :(得分:2)
Can you set a javascript function name as an html attribute?
中介绍了您要执行的操作但我建议你这样解决:
$('#button').click(function() {
$('#example').off('click.myNamespace') // remove the previously assigned callback
.on('click.myNamespace', creatClickCallback(functionb)); // register the new callback
});
function functiona() {
console.log('functiona');
}
function functionb() {
console.log('functionb');
}
function creatClickCallback(functionToCall) {
return function(evt) {
functionToCall()
}
}
$('#example').on('click.myNamespace', creatClickCallback(functiona));

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='example'>OK</div>
<div id='button'>button</div>
&#13;
通过这种方式,您可以确保不会以错误的方式命名函数,因为您将其作为对该函数的实际引用而不是字符串传递。
答案 1 :(得分:-1)
你不能存储功能名称,然后当你点击时检查哪个功能然后调用它并更新你想要的功能?
这样的事情:
function functiona(){
console.log('called functiona');
document.body.style.background = '#aaa';
}
function functionb(){
console.log('called functionb');
document.body.style.background = '#fff';
}
$('#example').on("click", function(ev){
var func = $(ev.target).attr('data-fn');
console.log(func);
window[func]();
});
$('#changer').on("click", function(ev){
//HERE you can change the function will be called based on what you want
//Here I just changed it with a simple if...
var fn = $("#example").attr("data-fn");
if (fn == 'functiona'){
$("#example").attr("data-fn", "functionb");
}else {
$("#example").attr("data-fn", "functiona");
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='example' data-fn='functiona'>Click Me to call function</div>
<button id='changer'>Change Function</button>
&#13;
这里,全局变量窗口存储了您的函数,因此如果该名称作为函数window[stringOfFuncionName]();
这不是做你需要的最好的方式(实际上你并没有完全清楚你的最终目标),但这可能会有所帮助。