jquery - 动态解析 jquery 集合值
问题描述
这可能只是获得正确方法来完成工作的一个案例。
我有一个 jQuery 集合,我为每个项目循环遍历它,然后我需要动态附加一个“选项卡”并创建一个click
事件处理程序。
但是,我需要从集合中解析一个值并在事件中使用它作为硬编码值。在运行时,集合对象不存在,我的代码返回undefined
.
var i = 0;
// Load them with
$(result).each(function () {
// Appending the Tab Here
$('#nav-tab').append('<a class="nav-item nav-link" id="nav-contact-tab' + i.toString() + '" data-toggle="tab" role="tab" aria-controls="nav-contact" aria-selected="false">' + this.TAB_CONTENT + '</a>');
// Some code to execute if we click on the tab
$('#nav-contact-tab' + i.toString()).click(function() {
// This is where my problem is:
// I need to make the assignment below as a value.
daTabID = this.TABLE_NAME;
alert(this.TABLE_NAME);
LoadReport();
alert('Report Loaded done');
});
i++;
alert(i);
});
解决方案
首先请注意,增量id
属性是一种反模式,应该避免。其次注意this
in$.each()
将引用迭代中的元素,而不是包含TABLE_NAME
andTAB_CONTENT
属性的外部范围。
实现您所需的最简单和最干燥的方法是使用通用class
属性和data
属性来保存有关元素的自定义元数据。然后,您可以使用单个委托事件处理程序,而不是在每个循环中创建一个新事件处理程序。尝试这个:
var $tab = $('#nav-tab').on('click', '.nav-contact-tab', function() {
var daTabID = $(this).data('table-name');
console.log(daTabID);
LoadReport();
});
$(result).each(function() {
$('#nav-tab').append('<a class="nav-item nav-link nav-contact-tab" data-table-name="' + this.TABLE_NAME + '" data-toggle="tab" role="tab" aria-controls="nav-contact" aria-selected="false">' + this.TAB_CONTENT + '</a>');
});
推荐阅读
- amazon-web-services - 如何检查哪个 AWS 账户和区域是部署的应用程序
- java - JavaSound API 不可用
- google-apps-script - 使用应用程序脚本幻灯片 (GAS) 服务发布幻灯片文件
- php - 中间件标头不适用于 laravel 7
- c# - C#,WPF - 使用 ControlTemplate 和 Binding 时不会显示 ListView 的项目
- python - 如何计算两个事件的总和,直到条件在 Python 中中断?
- game-maker - 在游戏制作工作室中编译程序时出错
- javascript - 无法通过 JS 渲染 svg
- python - 有没有办法分析一个文本文件来检查这个标准
- sql - Oracle PL SQL 过程需要修改以接受具有所有类型字符的数组并拆分