gpt4 book ai didi

javascript - 在将函数作为参数传递给 jquery 委托(delegate)事件处理程序时尝试使用 "this"而不必使用 "that"

转载 作者:行者123 更新时间:2023-12-02 16:00:24 25 4
gpt4 key购买 nike

假设我有一些 JavaScript,我已成功将两个事件处理程序附加到 DOM 无序列表中的所有 DOM“li”元素:

function userClickFunction() {
console.log("USER CLICK");
clickFunction(this);//had to pass "this" as parameter
}
function autoClickFunction() {
console.log("AUTO CLICK");
clickFunction(this);//had to pass "this" as parameter
}
function clickFunction(that) {
var clickedItem = $(that).attr('id');//using "that" I was able to get the attrs from the "li" element
console.log("CLICKED!");
}
$("#my_list").delegate("li", "click", userClickFunction);
$("#my_list").delegate("li", "autoClick", autoClickFunction);

然后我在 JS 中的其他地方触发这些事件处理程序。

$("#some_li").trigger('click');//just kidding, the user does this :P
$("#some_li").trigger('autoClick');//fired by comparing some elaborate timers and interesting state variables.

我只是想知道是否有一个更优雅的解决方案来不必使用“that”以及函数 clickFunction() 中的“this”实际指的是什么?是否有其他方法可以引用调用函数的上下文而不必将其作为参数传递?谢谢!

最佳答案

您可以使用 .call() 传递自定义上下文如下所示,在调用函数时,然后可以在回调函数中使用 this

function userClickFunction() {
console.log("USER CLICK");
clickFunction.call(this); //had to pass "this" as parameter
}

function autoClickFunction() {
console.log("AUTO CLICK");
clickFunction.call(this); //had to pass "this" as parameter
}

function clickFunction() {
var clickedItem = this.id; //now this refers to the `li` element, also to get the `id` just refer to `this.id` no need to call `attr()`
console.log("CLICKED!");

关于javascript - 在将函数作为参数传递给 jquery 委托(delegate)事件处理程序时尝试使用 "this"而不必使用 "that",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31259414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com