jQuery 访问从字符串创建的元素
jQuery access to elements created from string
我已经在表中定义并创建了<input>
元素,其ID为id="value0"
,id="value1"
,...
for(var i=0; i<result.length; i++){
$('#development_mapping tbody').append(
'<tr><td>'+ result[i].visual_feature+'</td> 'n'
<td><input name="data-feature_x" id="value'+i+'"/></td>'n'
</tr>'
);
};
现在我想访问这些 ID。这里有一个问题。我不明白为什么这段代码不起作用:
for(var i=0; i<result.length; i++){
var tmp_index = '#value' +i;
$(tmp_index).keydown(function(e) {
if (e.keyCode === 13) {
execute();
console.log(tmp_index, " ok!");
}
});
}
由于输入是动态添加的,因此需要使用event delegation
来注册事件处理程序
// New way (jQuery 1.7+) - .on(events, selector, handler)
$('#development_mapping tbody').on('keydown', tmp_index, function (e) {
if (e.keyCode === 13) {
execute();
console.log(this.id, " ok!");
}
});
增量id
属性从来都不是一个好主意,主要是因为它会导致上述问题,也因为它们维护起来很痛苦。改用类对元素进行分组 - 这是类的设计目的。此外,由于这些元素是在页面加载后动态追加的,因此需要使用委托事件。试试这个:
for (var i = 0; i < result.length; i++){
$('#development_mapping tbody').append('<tr><td>'+ result[i].visual_feature+'</td><td><input name="data-feature_x" class="feature"/></td></tr>');
};
$('#development_mapping tbody').on('keydown', '.feature', function(e) {
if (e.keyCode === 13) {
execute();
console.log("ok!");}
});
}
这是因为闭包变量范围问题...在这种情况下,您可以使用this.id
访问 elemetn ID
for (var i = 0; i < result.length; i++) {
$('#value' + i).keydown(function (e) {
if (e.keyCode === 13) {
execute();
console.log(this.id, " ok!");
}
});
}
这里的元素是在页面加载后创建的,因此事件不会与这些元素绑定。
使用 .on() 函数在动态创建的元素上附加事件。
for(var i=0; i<result.length; i++){
var tmp_index = '#value' +i;
jQuery("#development_mapping tbody").on("keydown",tmp_index,function(e) {
if (e.keyCode === 13) {execute();
console.log(tmp_index, " ok!");}
});
}
相关文章:
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 根据对多个数组唯一的元素创建一个新数组
- 使用Jquery从所有元素创建一个字符串
- 如何从html表单数组元素创建javascript数组
- 在 Backbone.js 中为集合中的一个元素创建详细信息页面
- 动态 DOM 元素创建
- 每 5 个元素创建一个新对象
- 下划线 从对象元素创建对象数组
- 从 2 个特定元素创建网格
- 维基百科如何从
- mongodb:如何为每个数组元素创建_id
- 如何为每 5 个元素创建一个 DIV
- 如何为自定义聚合物元素创建方法并在主应用程序中调用它
- jQuery元素创建,值传递
- 我无法基于实际的 HTML 元素创建类
- 在 jQuery 中迭代数组时,每隔一个元素创建新列表
- Mouseover/out难题上的JS元素创建/删除
- 为Angular指令创建的元素创建名称
- Javascript/jquery从具有相同rel的元素创建数组
- 如何使用DOM元素创建表单的副本