我需要帮助来理解使用.call()在jQuery鼠标事件中的回调?

我需要帮助来理解使用.call()在jQuery鼠标事件中的回调?,jquery,events,mouseenter,Jquery,Events,Mouseenter,我的主要问题是从事件处理程序(特别是鼠标输入事件)传递什么 我在插件中有如下代码: (function ($, undefined) { $.fn.MyPlugin= function (options) { var defaults = { mpClickCallback: defaultCallback, mpEnterCallback: defaultCallback, mpExitCallback: defaultCallback

我的主要问题是从事件处理程序(特别是鼠标输入事件)传递什么

我在插件中有如下代码:

(function ($, undefined) {
$.fn.MyPlugin= function (options) {
    var defaults = {
        mpClickCallback: defaultCallback,
        mpEnterCallback: defaultCallback,
        mpExitCallback: defaultCallback
    };
    var settings = $.fn.extend(defaults, options);

    var list= $(this).find("#list");
    var items= $(menuList).find("li");

    var defaultCallback = function (bool, data, element){
    };


    $(list).each(function (){
        $(this).mouseenter(function(e){
            settings.mpEnterCallback.call(true, e, this);
        })
        .mouseleave(function(evt){
            settings.mpExitCallback.call(true, evt, this);
        })
        .click(function(evt){
            settings.mpClickCallback.call(true, evt, this);
        });


    });

    }
})(jQuery);
上述代码将使用如下所示的参数触发以下处理程序:

$("#MyLists").MyPlugin({
    mpEnterCallback(e, el){
        console.log("event data: " + e);
        console.log("element" + el);
});
当我省略第一个参数时,在回调中el对象就没有定义。 settings.mpintercallback.call(e,this)

我试图提供一个简单的回调函数,以便在HTML脚本中,当鼠标进入或退出时,可以为元素创建代码处理程序

HTML示例:

<div id="MyLists">
  <ul id="mylist-list">
    <li>
      <div class="list-item">My first list item
        <a href="#item1">image link <span>link item</span> </a>
      </div>
      <div class="list-item-footer">
         image here
         image here
      </div>
    </li>
  </ul>
</div>

  • 我的第一个列表项 图像在这里 图像在这里
我试图为插件中的所有元素提供处理程序,因为它们都为页面提供了一个功能

为什么以及如何确定事件处理程序的参数。
我看到大多数情况下,它们都有第一个参数的事件数据,但如果我使用的是不起作用的,那么我只能在使用这3个参数时获得事件处理程序的偶数数据。

原因是
调用的第一个参数是
thisArg

语法:
fun.call(thisArg[,arg1[,arg2[,…])

参数

thisArg-为调用fun提供的值。请注意,这可能不是该方法看到的实际值:如果该方法是 函数在非严格模式代码中,null和undefined将被替换 使用全局对象,和基本值将被装箱

arg1, arg2。。。 对象的参数

如图所示,第一个参数被传递给
this

function demo(e, el){
  console.log(this, e, el);
}

/* this = "hey"
 * e = "there"
 * el = "!"
 */
demo.call("Hey", "there", "!");
通常jQuery会将
这个
设置为元素,因此在jQuery插件中保留这个模式可能是个好主意:

settings.mpEnterCallback.call(this, e);

function(e){
    console.log("event data: " + e);
    console.log("element" + this);
 }

defaultCallback是在稍后尝试解决这个问题时添加的,我通常会将函数(){handler}放在默认选项数组中。谢谢@jantimon,这篇文章很有帮助。谢谢您提供的示例,我将按照您的描述使用它。我更感兴趣的是,为什么在任何时候使用额外的参数。call()这是隐含的,除非您使用一个参数,然后它需要显式。call(this,arg)并因此引起我的困惑。非常欢迎:)还有
.apply()
,它的作用几乎与
.call()
相同。因此
.apply()
是javascript的一部分,由jquery使用。很高兴知道。