Javascript jQuery新手:如何将参数传递给事件处理程序函数?

Javascript jQuery新手:如何将参数传递给事件处理程序函数?,javascript,jquery,Javascript,Jquery,我正在查看jQuery文档中“click”事件的示例。我可以按如下方式重构这两个匿名函数,它仍然可以工作: $(document).ready(function(){ $("p").hover(hilite, remove_hilite); }); function hilite() { $(this).addClass("hilite"); } function remove_hilite() { $(this).removeClass("h

我正在查看jQuery文档中“click”事件的示例。我可以按如下方式重构这两个匿名函数,它仍然可以工作:

$(document).ready(function(){
    $("p").hover(hilite, remove_hilite);
  });

  function hilite()
  {
    $(this).addClass("hilite");
  }

  function remove_hilite()
  {
    $(this).removeClass("hilite");
  }
但是,如果我想将一个参数传递给hilite怎么办?我的第一个猜测是我应该使用一个匿名函数,比如。但是,这似乎不起作用,即使我在没有任何争论的情况下使用它:

$("p").hover(
    function()
    {
        hilite();
    }
    ,
    function()
    {
        remove_hilite();
    }
);
我还尝试了如下重构,但这也不起作用:

$(document).ready(function(){
    $("p").hover(hilite2, remove_hilite);
  });

  function hilite2(){
     return hilite();
  }

正确的方法是什么?我觉得我在概念上有很大的误解。特别是,我不清楚在我的第一次重构中,
this
对象是如何传递给
hilite
函数的。

为什么不能在匿名函数中调用
$(this).addClass()
方法

$("p").hover(
  function () {
    $(this).addClass("hilight");
  },
  function () {
    $(this).removeClass("hilight");
  }
);

您可以将悬停函数调用封装到另一个接受“className”参数的函数中:

$.fn.hoverClass = function(className){
    return this.hover(function(){
        $(this).addClass(className);
    }, function(){
        $(this).removeClass(className);
    });
}
然后,您可以通过以下方式简单地使用它:

$('p').hoverClass('hilite');

我认为您需要的是一个部分功能应用程序

function partial(func /*, 0..n args */) {
  var args = Array.prototype.slice.call(arguments, 1);
  return function() {
    var allArguments = args.concat(Array.prototype.slice.call(arguments));
    return func.apply(this, allArguments);
  };
}
使用上述功能,您现在可以执行以下操作:

$(document).ready(function(){
    var f = partial(hilite, "arg1", "arg2" /*etc...*/);
    $("p").hover(f, remove_hilite);
  });

参考:

是的,这是我链接到的页面上的原始功能。我试图探索如何重构它。在本例中,它只是一行程序,但我希望将复杂的函数存储在单独的文件中,以便在多个网页中重用。不可能这样做吗?