【问题标题】:jquery, attaching click event to a function and combining with a string of javascript calls?jquery,将点击事件附加到函数并结合一串javascript调用?
【发布时间】:2018-01-24 19:41:08
【问题描述】:

我正在尝试将点击事件附加到一个按钮,该按钮运行来自参数和自身的调用。

我想要的是始终显示第一个警报,然后执行作为字符串存储在 myparam.onclick 中的第二个警报。

无效尝试:

var myparam = { onclick: 'alert("second");' };
$('#my_button_id').on('click', function(){ alert('first'); myparam.onclick }); 

我知道如果我把 myparam 改成合法的函数,比如:

var myparam = {onclick: function(){alert('second');} }

我可以这样称呼它

$('#my_button_id').on('click', myparam.onclick);

但我仍然不知道如何将两个连接在一起。我不想在 myparam func 调用中每次都调用第一个警报。

感谢任何帮助。

【问题讨论】:

  • 您希望将其存储为字符串的用例是什么?必须在该字符串上使用eval(),但这并非没有很大的安全问题。另一种方法是将命名函数存储为字符串,将参数存储为其他属性,然后调用命名函数... myFunctions[myparam.onclick](myparam.clickParams)
  • 使用场景是一个 json 按钮数组,每个按钮都有自己的 javascript 调用,但是对于每个按钮,我还想运行一个通用的 javascript 调用,而不需要将所有重复的调用放入大批。我想另一种方法是为附加功能使用第二个单独的 jquery 点击处理程序。我希望能够解析字符串,这样我也可以避免必须围绕 javascript 构建整个 function(){} 调用。
  • 也可以使用data- 属性做很多事情。例如,看看整个引导库是如何工作的

标签: javascript jquery html


【解决方案1】:

您可以使用eval 函数将javascript代码作为字符串执行。

var myparam = {
  onclick: 'alert("second");'
};
$('#my_button_id').on('click', function() {
  alert('first');
  eval(myparam.onclick);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<button id="my_button_id">Click</button>

【讨论】:

    【解决方案2】:

    很接近:

    var myparam = {onclick: function(){alert('second');} };
    $('#my_button_id').on('click', function(){ alert('first'); myparam.onclick() }); 
    

    您在函数调用的末尾错过了一个括号:myparam.onclick()

    【讨论】:

    • @JaniB 您在询问如何执行以字符串形式存储在myparam.onclick 中的第二个警报。这个答案不是你想要的。
    【解决方案3】:

    你应该看到那个伙伴:https://stackoverflow.com/a/12651991/6158032

    我的小帮助是..

    //Clousure 
    (function($) {
        //Document.ready
        $(function(){
        //I think you want this ?
        let myparam = { onclick: function() { alert("second"); } };
        $('#my_button_id').on('click', function(){ alert('first'); myparam.onclick() }); 
        //Another way.
        function doAlert (messages) {
            alert(messages);
        }
        //Params Object
        let my_params = {
            onclick_first : function () { return doAlert('first') },
          onclick_second : function () { return doAlert('second') }
        }
        //Event Click
        $('#my_button_id').on('click',function(){
            //First Alert
            my_params.onclick_first();
          //Second Alert
          my_params.onclick_second();
        });
      });
    })(jQuery);
    

    JSFIDDLE DEMO

    【讨论】:

    • 但是这些函数不能字符串化为json
    • 那不是问题,我去看看
    【解决方案4】:

    如果你真的需要一个字符串,你可以创建一个函数并将正文作为字符串提供,然后调用它:

    var myparam = { onclick: 'alert("second");' };
    $('#my_button_id').on('click', function(){
        alert('first');
        var fun = Function(myparam.onclick);
        fun();
    });

    【讨论】:

      猜你喜欢
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      相关资源
      最近更新 更多