将函数存储在data()中并稍后执行

时间:2019-04-30 14:34:12

标签: jquery

我想用data()存储一个回调。我面临的问题是该函数在存储它的那一刻开始执行,并且我希望在用户单击时执行该函数

JS

function showOnlyOnClick(message)
{
    alert(message);
}

$("button").click(function()
{
    var callback = $(this).data("callback");

    if(callback)
    {
       callback;
    }
});

$("button").data("callback", showOnlyOnClick("not yet!!!"));

提琴:https://jsfiddle.net/ygstvbwj/

2 个答案:

答案 0 :(得分:1)

问题是因为您要立即调用showOnlyOnClick()函数并将该函数调用中的响应分配给data属性。

要解决此问题,您可以将调用包装在匿名函数中,以便为data属性提供函数 reference ,您可以在事件发生时稍后调用该属性。试试这个:

function showOnlyOnClick(message) {
  alert(message);
}

$("button").click(function() {
  var callback = $(this).data("callback");
  callback && callback();
});

$("button").data("callback", function() {
  showOnlyOnClick("not yet!!!")
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>click me</button>

答案 1 :(得分:0)

尝试一下:

function showOnlyOnClick(message) {
  alert(message);
}

$("button").click(function() {
  var callback = $(this).data("callback");

  if (callback) {
    callback("on click");
  }
});

$("button").data("callback", showOnlyOnClick);

您正在最后一行执行该功能。您需要存放它的身体。