动态更改分配的点击功能

时间:2018-06-18 18:44:57

标签: javascript

example

可能一切都很清楚 我需要通过点击data-fn来改变将要执行的功能。 当前函数应存储在ZipFile

任何帮助?

2 个答案:

答案 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;
&#13;
&#13;

通过这种方式,您可以确保不会以错误的方式命名函数,因为您将其作为对该函数的实际引用而不是字符串传递。

答案 1 :(得分:-1)

你不能存储功能名称,然后当你点击时检查哪个功能然后调用它并更新你想要的功能?

这样的事情:

&#13;
&#13;
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;
&#13;
&#13;

这里,全局变量窗口存储了您的函数,因此如果该名称作为函数window[stringOfFuncionName]();

存在,则通过它的名称并调用它应该有效。

这不是做你需要的最好的方式(实际上你并没有完全清楚你的最终目标),但这可能会有所帮助。