gpt4 book ai didi

javascript - 在函数中转换事件处理程序

转载 作者:太空宇宙 更新时间:2023-11-03 20:10:13 27 4
gpt4 key购买 nike

我有以下代码。

$('.crossOutAnswer').on('click', function(){
var crossStatus = $(this).hasClass('alreadyCrossOutAnswer'),
crossOutElement = $(this).attr('class').split(' ')[1].split('-')[1];
if(crossStatus == 1){
$(this).removeClass('alreadyCrossOutAnswer');
$('.res' + crossOutElement).removeClass('CrossedOutQuestion');
}else{
$(this).addClass('alreadyCrossOutAnswer');
$('.res' + crossOutElement).addClass('CrossedOutQuestion');
}
})

它工作正常,但我想做的是将其转换为 2 个函数

  1. 先做先声明
  2. 第二个做ELSE语句

问题是,当我尝试将它们转换为 2 个函数时,$(this) 停止工作(由于显而易见的原因,不再有触发器)。

有谁知道如何在函数中转换事件处理程序的最佳实践?

编辑

请注意,我可以毫无问题地传递 this 参数,但变量会变得未定义。因此,解决方案必须在不在函数中重新声明的情况下解决该问题

最佳答案

你有两个选择:

第一:

您可以将 this 作为参数传递给函数,如下所示:

if(crossStatus == 1){
functionA(this);
}else{
functionB(this);
}

并使用它:

functionA(remoteThis){
$(remoteThis).doSomething();
}

第二:

您可以使用 apply() 调用这些函数并将 this 作为上下文传递,这样这些函数将具有相同的 this 上下文,像这样:

if(crossStatus == 1){
functionA.apply(this);
}else{
functionB.apply(this);
}

并使用它:

functionA(){
$(this).doSomething();
}

关于javascript - 在函数中转换事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35903421/

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