添加选项以使用json进行选择

时间:2014-08-25 13:57:07

标签: jquery json combobox each

如果组合框中还没有这些值,我怎么能在这个数组上运行并将值添加到组合框? (注释:在将它们添加到组合框之前已经存储了值 - 年份):

[{"id":3,"year":2015},{"id":2,"year":2014},{"id":1,"year":2013}]

编辑:这是没有检查重复的工作解决方案

function reloadPayments() {
    $.get('PHPCalls.php?CallID=GetPaymentList', function(payments) {
        $.each(payments, function(i,o) {
            $('#paymentList')
                .append($("<option></option>")
                .val(obj.id)
                .html(obj.year));
        });
    }, 'json');
}

组合框

<form id="formgroup" class="formstyle" action="*" method="POST">                  
    <label for="paymentList"> Kies een jaartal</label>
    <select id="paymentList" name="paymentList" class="txt">
        <option value="-2">Selecteer...</option>
        <option value="-1">Nieuw...</option>
        <?php
            foreach(Payment::getAll() as $payment)
                {
                    echo '<option value="'.$payment->id.'">'.$payment->year.'</option>';
            }                      
        ?>
    </select>
</form>

1 个答案:

答案 0 :(得分:1)

看起来您可能正在JSON数组上执行不必要的.each()。我在这里设置了一个小提琴......它不是一个完美的匹配,因为它不清楚如何调用该函数并且我没有使用AJAX,但假设你的数组这是准确的,这应该有效:http://jsfiddle.net/poce6jzn/

如果我理解你要完成的任务(上面的示例应该为组合框添加3个选项 - 每年一个),你想要删除第二个.each()循环并将obj.idobj.year替换为o.ido.year

为了将来参考,如果您使用谷歌浏览器,可以使用各种工具来调试/可视化JSON /其他阵列。我发现特别有用的是console.dir(obj),它以易于阅读的解析格式转储整个数组。

编辑:这是为了回答关于重复的评论..

您可以遍历现有选项并检查它们是否存在:

在追加声明之前,检查列表中的现有项目是否已经不存在,然后附加

duplicateFlag = false;
$('#boxWithElements option').each(function(){
     if ( obj.id == this.value ) {
          duplicateFlag = true; 
     }
});

if (duplicateFlag === false) { 
     $('#paymentList')
          .append($("<option></option>")
          .val(obj.id)
          .html(obj.year));
}