0

我有一个 JSON 对象

var jsonString =[
    {
        "key": "Monday, June 18, 2012",
        "value": "10 00 AM|_mod,11 00 AM|_mod,12 00 PM|_mod,13 00 PM|_mod"
    },
    {
        "key": "Tuesday, June 19, 2012",
        "value": "13 00 PM|_mod,13 30 PM|_mod,14 00 PM|_mod,14 30 PM|_mod,15 00 PM|_mod"
    }
];

我有两个下拉菜单,我试图将从第一个下拉列表中选择的键与 JSON 中的键匹配,并使用适当的值填充第二个下拉列表。我希望选项标签看起来像这样

<option value="10 00 AM|_mod">10 00 AM</option>

但我看到了这个

在此处输入图像描述

我认为 10 00 AM|_mod 中的空格在创建 DOM 时会导致问题。

这是我的 JS 代码。

$('#event_date').change(function() {
    var event_date = $("#event_date").val(); // first drop-down val
    var time_type = null;
    var time = null;
    for (var x = 0; x < jsonString.length; x++) {
        if (event_date == jsonString[x].key) {
            var value = jsonString[x].value;
            console.log(value);  // output: 10 00 AM|_mod,11 00 AM|_mod,12 00 PM|_mod,13 00 PM|_mod
            var value_split = value.split(",");
            for (var i = 0; i < value_split.length; i++) {
                console.log(value_split[i]);    // works fine at index 0 I get 10 00 AM|_mod
                time_type = value_split[i].split("|");
                time = time_type[0];
                $('#timeslotIdentifier').append("<option value =" + value_split[i] + ">" + time + "</option>");
            };
        };
    };
});

有编码问题吗?我尝试添加断点,它看起来不错,但是当我检查元素时,我看到了这个。

在此处输入图像描述

4

3 回答 3

4

您正在创建一个不带引号的属性值。

您应该改用 jQuery:

$('<option />').text(time).val(value_split[i]).appendTo('#timeslotIdentifier');
于 2012-06-06T22:20:13.063 回答
1
$('#event_date').change(function() {
    var event_date = $("#event_date").val(); // first drop-down val
    var time_type = null;
    var time = null;
    for (var x = 0; x < jsonString.length; x++) {
        if (event_date == jsonString[x].key) {
            var value = jsonString[x].value;
            console.log(value);  // output: 10 00 AM|_mod,11 00 AM|_mod,12 00 PM|_mod,13 00 PM|_mod
            var value_split = value.split(",");
            for (var i = 0; i < value_split.length; i++) {
                console.log(value_split[i]);    // works fine at index 0 I get 10 00 AM|_mod
                time_type = value_split[i].split("|");
                time = time_type[0];
                $('#timeslotIdentifier').append($("<option>").attr({value: value_split[i]}).text(time));
            };
        };
    };
});
于 2012-06-06T22:26:29.633 回答
1

在这种情况下, jQuery.val()肯定更好,但如果你不知道错误在哪里,它就在这里:

//Nope. (Missing quotes in HTML)
$('#timeslotIdentifier')
    .append("<option value =" + value_split[i] + ">" + time + "</option>");

//Yep.
$('#timeslotIdentifier')
    .append("<option value =\"" + value_split[i] + "\">" + time + "</option>");
于 2012-06-06T23:27:49.200 回答