【问题标题】:Using JavaScript, Populate checkboxes on drop-down list change from a text file使用 JavaScript,从文本文件更改下拉列表中的填充复选框
【发布时间】:2012-04-30 11:02:54
【问题描述】:

我有一个名为 rcc 的下拉列表和一些复选框组。这是它的 HTML 代码。

<select id="rcc" name="rcc">
    <option value="Select Your Name">Select Your Name</option>
    <option value="p1">Person 1/option>
    <option value="p2">Person 2</option>
    <option value="p3">Person 3</option>                    
</select>

<input type="checkbox" name="time1[]" value="8:00am"/>8:00am
<input type="checkbox" name="time1[]" value="8:20am"/>8:20am
<input type="checkbox" name="time2[]" value="8:40am"/>8:40am
<input type="checkbox" name="time2[]" value="9:00am"/>9:00am
<input type="checkbox" name="time3[]" value="9:20am"/>9:20am
<input type="checkbox" name="time4[]" value="9:40am"/>9:40am

我还生成了一个文本文件,其中包含当有人在下拉列表中选择其他人时我希望被选中的时间。例如,如果我选择 Person 1,我想打开 p1times.txt,它看起来像:

time1
8:00am
time2
8:40am
9:00am
time4
9:40am

然后运行一个脚本,该脚本会自动填充页面上的相应复选框。我正在考虑遍历文本文件,但我不确定逻辑将如何工作。任何帮助都会很棒:)。

【问题讨论】:

  • 您是否考虑过以 JSON 等格式存储数据?这将使解析数据变得更加容易。
  • 我对 JSON 没有任何经验,但我认为它可能会起作用。你知道我将如何将我的 .txt 文件翻译成 JSON,或者它可能是什么样子吗?
  • 就像比尔发布的一样 :)

标签: javascript


【解决方案1】:

我在http://jsfiddle.net/RHUdR/1 发布了一个示例。我建议将您的时间存储为 JSON。如果您想将它们放在不同的文件中,只需将该文件包含在您的 html 中,就像任何其他脚本文件一样。

数据:

var people = {
    p1: { time1: [ '8:00am', '8:20am'], time4: ['9:40am'] },
    p2: { time2: [ '8:40am'], time3: ['9:20am'] },
    p3: { time1: [ '8:00am'], time2: ['9:00am'], time4: ['9:40am' ]}    
};

还有一个小 jquery 来设置值:

$('#rcc').change(function() {
    var person = $(this).val();
    var times = people[person] || [];

    $('input[type="checkbox"]').attr('checked', false);
    for (var name in times) {
        var bucket = times[name];
        for(var i = 0, len = bucket.length; i < len; i++ ) {
            $('input[name="' + name + '"][value="' + bucket[i] + '"]')
                .attr('checked', true);
        }
    }        
});

【讨论】:

  • 谢谢比尔,这是一个很好的开始,但并不是我想要的。 p1(Person 1) 可以在多天有时间,例如,当我单击 Person 1 时,我希望名为 times1 的复选框组应该选择上午 8 点,然后另一个名为 times2 的复选框组应该选择上午 8 点 40 分和上午 9 点 20 分。也许可以修改此代码以支持该功能?
  • 此代码实际上与提供的 html 一起使用,因此存在您指定的复选框组,当提交表单时,您将看到 times1['8:00am'] 和 time2['8:40am', “上午 9 点 20 分”]。但是,由于所有时间都不同,因此没有理由在文本文件或代码中以这种方式对它们进行编码。他们的情况是否可以在组之间重叠?
  • 是的,不同的时间[x] 会有相同的时间。抱歉,我之前没有具体说明。
  • 出于某种原因,它似乎对我不起作用。我将代码上传到您的示例中,也许我在某个地方犯了错误?
  • 首先,确保您使用的是更新后的代码,看起来小提琴仍在使用原始代码。其次,小提琴不起作用,因为它找不到包含时间的 .js(我猜它就在您的计算机本地)。第三,在小提琴中,您永远不会调用loadTimesNow(),因此实际上没有执行任何操作。
猜你喜欢
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
相关资源
最近更新 更多