【问题标题】:Loop over object and display value into list based on option choice循环对象并根据选项选择将值显示到列表中
【发布时间】:2015-07-18 14:50:35
【问题描述】:

我有一个构造函数并创建了一些实例,我将它们放在一个数组中。我要做的是根据我从选项列表中选择的内容将所述对象的值显示到空列表中。这是我到目前为止所做的:

<ul id="contactinfo"></ul>

<select id="dropdown">
    <option value="email">Email</option>
    <option value="number">Phone Number</option>
</select>
function ContactList (name, email, number) {
this.name = name;
this.email = email;
this.number = number;
}

var christian = new ContactList('Christian', 'christian@yahoo.com', '323-555-124');
var contactarray = [christian];

function displayinfo () {
    var dropdown = $('#dropdown').val();
    var number = $('#dropdown').val('number');
    var email = $('#dropdown').val('email');

    for (i = 0; i < contactarray.length; i++) {
        if (dropdown == number) {
            $('#contactinfo').append('<li>' + contactarray[i].number + '</li>');
        } else {
            $('#contactinfo').append('<li>' + contactarray[i].email + '</li>');
        }
    }
}

displayinfo();

【问题讨论】:

  • 所以您想根据下拉菜单中选择的内容显示对象的信息? #contacts 应该是 #contactinfo 吗?
  • 是的,抱歉,这是一个错误,进行了编辑
  • 你能把ContactList的代码加进去吗?
  • 给你,进行编辑

标签: javascript jquery html if-statement for-loop


【解决方案1】:

首先,请注意您当前代码的主要问题是 $('#dropdown').val()$('#dropdown').val('number')$('#dropdown').val('email') 都返回相同的内容 - jQuery 对象中的下拉列表。另请注意,后两者也将值设置为提供的值,因此 JS 将始终只检索 email,因为这是最后设置的。

要修复它,您可以使用下拉列表中选择的值并直接从contactarray 元素中检索该属性。试试这个:

function displayinfo () {
    var $contacts = $('#contactinfo').empty();
    for (i = 0; i < contactarray.length; i++) {
        $contacts.append('<li>' + contactarray[i][$('#dropdown').val()] + '</li>');
    }
}

最后,你还需要在select中的选项改变时执行displayinfo,同时清除之前附加的li。查看下面的小提琴以获得完整的工作示例:

Working example

【讨论】:

  • 感谢您指出我可以看到下拉变量的错误在哪里,那么选择选项值的正确语法是什么?
  • 如果要设置选定的选项,请使用.val('email'),要获取值,请使用.val()。更多信息:api.jquery.com/val
  • 好吧,有道理,还有contactarray[i][$('#dropdown').val()]如何从对象中获取特定值,是不是因为选项值相同名称作为属性? (抱歉所有问题,只是想了解)
  • 它使用括号表示法访问包含在contactarray[i] 中的对象。例如,它相当于contactarray[i].email(假设在下拉列表中选择了“电子邮件”)
  • 如果选项值与ContactList 对象的属性名称不同,那么您需要像原始代码一样使用if 语句。
猜你喜欢
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-04
  • 1970-01-01
  • 2015-05-25
  • 2013-10-10
相关资源
最近更新 更多