javascript - 使用来自就绪函数的参数将正确的上下文传递给函数
问题描述
我花了一天时间试图找到将正确的上下文传递给removeForm
. 目标是使用removeForm
在按下<a class="remove_2"> remove </a>
链接时调用的 which 来删除removeForm
在这种情况下传递给“subform2”的类的内容。这是我尝试过的:
function removeForm(tgsubf) {
var $removedForm = $(this).closest(tgsubf);
var removedIndex = parseInt($removedForm.data('index'));
$removedForm.remove();
}
$(document).ready(function() {
$('.remove_2').click(function(e){
e.preventDefault();
removeForm('.subform2')
});
}
<div class="subform2">
<a class="remove_2"> remove </a>
</div>
我知道上下文取决于我如何调用函数,但如果我使用调用函数,removeForm('subform2')
我仍然有这个问题。完整的示例在此处托管。
解决方案
如果要删除.subform2
包含.remove_2
被单击的元素,可以执行以下操作。
当您在传递给 jQuery 的事件回调中时,this
(通常)保存接收到事件的元素。因此,您应该将代码更改为具有以下内容:
$('.remove_2').click(function(e){
e.preventDefault();
removeForm(this) // <-- 'this' will refer to $('.remove_2')
});
然后您可以更改您的removeForm()
以获取传递给它的元素的直接祖先(这将是.remove_2
),.subform2
并删除它,如下所示:
function removeForm(anchor) {
var $removedForm = $(anchor).closest('.subform2');
$removedForm.remove();
}
更新
您应该能够传递一个选择器removeForm
来识别祖先,如下所示:
function removeForm(el, ancestorSelector) {
// Do check to ensure ancestorSelector is provided, before using it.
var $removedForm = $(el).closest(ancestorSelector);
$removedForm.remove();
}
您可以像这样更新您的称呼方式:
$('.remove_2').click(function(e){
e.preventDefault();
removeForm(this, '.subform2') // <-- 'this' will refer to $('.remove_2')
});
推荐阅读
- node.js - 获取 Node.js + Express REST API 来更新 mongoDB
- search - 如何配置 Fuse.js 搜索结果以匹配单个单词?
- python - Coinpaprika 达到最大请求限制错误
- mysql - 加载 infile 命令从第一个字符中删除 0
- android - 我的 (android) 设备进入睡眠状态后,我的网站的音频播放器将暂停
- reactjs - 在反应引导下拉按钮中显示第一个选定的项目
- c++ - 为什么小于等于运算符在 C++ 中对两个 ```double``` 值显示意外行为?
- node.js - 如何将 Flutter 与 NodeJS 后端连接起来
- azure - 有没有办法为 Azure AD 中的一些来宾帐户设置基于 OTP 的身份验证?
- swift - Swift 如何知道是否选择了我的细分项目之一?