【问题标题】:How to set jQuery this when calling a function?调用函数时如何设置jQuery this?
【发布时间】:2010-10-15 19:06:33
【问题描述】:

使用 jQuery,我设置了一个链接标签的点击处理程序,如下所示:

$('#lnk').click(handleClick);

handleClick 做这样的事情:

function handleClick() {
    var $this = $(this);
    ...
}

现在我需要在被点击的#lnk 之外直接调用handleClick()。有没有办法让我在调用handleClick时设置this

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您可以使用apply()call()

    handleClick.call(theElementThatShouldBeThis);
    

    当然,theElementThatShouldBeThis 必须是一个 DOM 元素或被接受为jQuery() 输入的东西。

    如果您要访问handleClick 中的event 元素,它会变得更加棘手。但我只是假设你没有;)

    您还可以始终通过调用$('#lnk').click()(模拟点击)在#lnk 的上下文中执行事件处理程序。

    【讨论】:

    • 我在 jQuery API 中看不到这些。是那些插件吗?有链接吗?
    • 那些是内置在javascript中的
    • @slolife:我链接到了相应的文档。这些是每个函数的方法。
    • 是的,那里暂时失去理智。我曾希望我能够在该评论被注意到之前将其删除,但是,不。
    • call() 将在那一刻调用该函数,事件绑定到元素而不是当我单击时......有什么建议吗?
    【解决方案2】:

    我认为您正在寻找“呼叫”或“申请”:

    呼叫

    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

    申请

    https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply

    来自 MDC

    var result = fun.apply(thisArg, [argsArray]);
    
    or
    
    var result = fun.call(thisArg[, arg1[, arg2[, ...]]]); 
    

    【讨论】:

      【解决方案3】:

      使用 Function.apply 并传入查询返回的 DOM 元素。

      handleClick.apply($('#lnk')[0]);
      

      或者更好的是,让 jQuery 模拟对元素的点击(假设您已经附加了点击事件处理程序)。

      $('#lnk').click();
      

      【讨论】:

        猜你喜欢
        • 2010-10-29
        • 2013-09-28
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        • 2015-02-19
        • 1970-01-01
        • 2013-12-24
        • 1970-01-01
        相关资源
        最近更新 更多