制作通用jQuery“addListener”

时间:2012-04-14 18:56:47

标签: javascript jquery

我正在尝试重现Google地图的addListener,但点击,按键等的jQuery监听器除外。

在Moogle地图中,您可以用{drag','mouseover'等编写.event.addListener(map, 'click', function()...或替换'click'。对于jQuery,我看到与'click','keypress'等并行的< / p>

我陷入了你可以将触发器类型作为变量传递的程度。声明单个包装器侦听器很简单,比如

  function addClickListener(id, fn) {
    $(id).click(function() { fn(event); });
  }      

  // and

  function addKeyPressListener(id, fn) {
    $(id).keypress(function() { fn(event); });
  }

我正在寻找的是破碎的,如下所示。我无法弄清楚Google如何传递像“click”这样的字符串并将该调用作为一个函数。也许用eval颤动

  function addListener(id, type, fn) {
    typeFn = $.type;
    $(id).typeFn(function() { fn(event); });
  }

最后:http://jsfiddle.net/YCVVL/

1 个答案:

答案 0 :(得分:2)

我认为你可以在这里使用'square bracket notation

function addListener(id, type, fn) {
    $(id)[type](function() { fn(event); }); //< here
}

或使用以下其中一项:

$(id).on(type, function() { fn(event); });
$(id).bind(type, function() { fn(event); });