如何从单击处理程序中的对象数组访问对象属性
How to access an object property from an array of objects in a click handler?
我已经创建了许多对象构造函数的实例,我将它们放入数组并循环显示到列表中。现在,我想从该列表中选择一个name属性,以便在onclick
事件处理程序中使用(在此代码中未显示)。我想知道如何访问单击处理程序中的名称属性。这就是我到目前为止所尝试的,但我一直没有定义。
console.log(contactarray[i].name);
console.log(contactarray.name);
代码$(document).ready(function() {
function ContactList (name, email, number,address) {
this.name = name;
this.email = email;
this.number = number;
this.address = '6539 Wilton Ave Culver City CA 90234';
}
var christian = new ContactList('Christian', 'christian@example.com', '323-555-124');
var rich = new ContactList('Rich', 'rich@example.com', '323-555-124');
var scott = new ContactList('Scott', 'scott@example.com', '323-555-124');
var danny = new ContactList('Danny', 'danny@example.com', '323-555-124');
var taka = new ContactList('Taka', 'taka@example.com', '323-555-124');
var tim = new ContactList('Tim', 'tim@example.com', '323-555-124');
var patrick = new ContactList('Patrick', 'patrick@example.com', '323-555-124');
var jacques = new ContactList('Jacques', 'jacques@example.com', '323-555-124');
var contactarray = [christian, rich, scott, danny, taka, tim, patrick, jacques];
for (i = 0; i < contactarray.length; i++) {
$('#contacts').append('<li class="itemname" id="'+i+'"><a href="#">' + contactarray[i].name + '</a></li>');
}
我的问题是访问一个列表项的名称属性时,它被点击。
您遇到的是循环中异步JavaScript事件的经典问题。这从你的问题中并不明显,因为它在任何地方都没有click
处理程序,但从你随后的评论中可以明显看出。总是在问题中提供足够的信息来重现实际问题。简化的代码是好的,但当基本问题区域被简化时就不是这样了!
最简单的解决方案是为每次循环迭代调用一个函数。每次调用一个函数时,它都会创建一个"闭包",该闭包捕获该函数中的所有参数和局部变量,即使是异步代码,如稍后调用的click
处理程序。
因为你使用的是jQuery,你可以用$.each()
来做,或者你可以在for
循环中创建和调用你自己的函数,只要你在每次循环迭代中调用它。
这是一个可行的解决方案。我还简化了代码,将联系人项直接放在数组中,而不是为每个联系人项创建一个命名变量。我把你的ContactList
构造函数的名字改为ContactItem
,因为它代表一个单独的项目,而不是一个列表:
function ContactItem( name, email, number,address ) {
this.name = name;
this.email = email;
this.number = number;
this.address = '6539 Wilton Ave Culver City CA 90234';
}
var contactarray = [
new ContactItem('Christian', 'christian@example.com', '323-555-124'),
new ContactItem('Rich', 'rich@example.com', '323-555-124'),
new ContactItem('Scott', 'scott@example.com', '323-555-124'),
new ContactItem('Danny', 'danny@example.com', '323-555-124'),
new ContactItem('Taka', 'taka@example.com', '323-555-124'),
new ContactItem('Tim', 'tim@example.com', '323-555-124'),
new ContactItem('Patrick', 'patrick@example.com', '323-555-124'),
new ContactItem('Jacques', 'jacques@example.com', '323-555-124')
];
var $contacts = $('#contacts');
$.each( contactarray, function( i, contact ) {
var $contact = $(
'<li class="itemname" id="' + i + '">' +
'<a href="#">' + contact.name + '</a>' +
'</li>'
);
$contact.click( function() {
alert( contact.name );
}).appendTo( $contacts );
});
更新小提琴
尝试替换
for (i = 0; i < contactarray.length; i++) {
$('#contacts').append('<li class="itemname" id="'+i+'"><a href="#">' + contactarray[i].name + '</a></li>');
}
contactarray.forEach(function(contact, id) {
$('#contacts').append('<li class="itemname" id="'+id+'"><a href="#" onclick="alert(' + contact.name + ')">' + contact.name + '</a></li>');
});
function ContactList (name, email, number,address) {
this.name = name;
this.email = email;
this.number = number;
this.address = '6539 Wilton Ave Culver City CA 90234';
}
window.onload = function()
{
var christian = new ContactList('Christian', 'christian@example.com','');
var rich = new ContactList('Rich', 'rich@example.com', '323-555-124');
var scott = new ContactList('Scott', 'scott@example.com', '323-555-');
var contactarray = [christian, rich, scott];
var btn = document.getElementById('btn');
btn.addEventListener('click',function(){
for (i = 0; i < contactarray.length; i++) {
$('#contacts').append('<li class="itemname" id="'+i+'"><a href="#">' + contactarray[i].name + '</a></li>');
}
},false);
}
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序