【问题标题】:How do you re-populate dynamically generated options for a select field?如何为选择字段重新填充动态生成的选项?
【发布时间】:2009-04-30 18:16:00
【问题描述】:

背景 我有两个链接在一起的选择表单字段:持续时间和频率。当用户选择频率时,会动态插入持续时间选项。有默认选项,但这些只是为了在用户展开它时该字段不为空。

例如,频率选项为“day”、“other day”和“week”。如果我选择“天”,频率选项会更改为“5 天”、“15 天”和“30 天”。

问题 当用户提交有错误的表单时,问题就出现了,返回表单时重新填充了所有表单字段,并且突出显示了错误(频率选择字段除外),其选项是动态生成的。它没有突出显示,它的选项是默认选项。

如果用户提交错误,有没有办法让我重新填充这些选项。我们正在做大量的 JavaScript 验证,所以这种情况不应该经常发生,但希望让用户获得尽可能轻松的错误体验。

代码 我正在使用 jquery 和一个名为 cascade 的 jquery 插件将两个字段链接在一起。 (http://plugins.jquery.com/project/cascade)

这是我的自定义 JavaScript。

此脚本生成选项列表:

var list1 = [
    {'When':'86400','Value':' ','Text':' '},
    {'When':'172800','Value':' ','Text':' '},
    {'When':'604800','Value':' ','Text':' '},
    {'When':'86400','Value':'432000','Text':'5 days'},
    {'When':'86400','Value':'1296000','Text':'15 days'},
    {'When':'86400','Value':'2505600','Text':'30 days'},
    {'When':'172800','Value':'1296000','Text':'15 days'},
    {'When':'172800','Value':'2505600','Text':'30 days'},
    {'When':'172800','Value':'3888000','Text':'45 days'},
    {'When':'604800','Value':'2505600','Text':'4 weeks'},
    {'When':'604800','Value':'3715200','Text':'6 weeks'},
    {'When':'604800','Value':'4924800','Text':'8 weeks'}
];

function commonTemplate(item) {
    return "<option value='" + item.Value + "'>" + item.Text + "</option>"; 
};

function commonMatch(selectedValue) {
    return this.When == selectedValue; 
};

这是触发选择选项生成的脚本:

jQuery("#duration).cascade("#frequency",{
    list: list1,            
    template: commonTemplate,
    match: commonMatch          
})

问题 当表单返回浏览器出现错误时,如何获取动态生成的频率选项以重新填充有什么想法吗?可以使用我当前使用的级联插件或其他方法吗?

非常感谢您的帮助。 :-)

【问题讨论】:

  • +1 表示首次用户提出的措辞恰当的问题。围绕这些部分的事件几乎太罕见了......
  • 谢谢,保罗。 :) 真的很想确保我得到一个好的答案,所以问了一个彻底的问题。希望我没有太过分。

标签: javascript jquery jquery-plugins


【解决方案1】:

我不熟悉这个插件,但你不能在 document.ready 上触发#duration 和/或#frequencychange() 事件吗?

$(document).ready(function() {
    $('#duration').change();
    $('#frequency').change();
});

我很确定脚本所做的所有事情都是将内容绑定到 select 的更改事件(至少默认情况下),以便触发插件发挥其魔力...

【讨论】:

  • 这听起来会起作用并且正在努力。但是,现在的问题似乎是没有动态生成的频率没有被重新填充。 :( 我正在排除故障,然后看看您的解决方案是否有效。
  • 做到了。谢谢,保罗。 :)
  • 虽然,最后一点,我只需要 .change() #frequency。
  • 是的,我认为这只是频率,我只是不太确定设置,所以我将两者都扔在那里以防万一。我想你会从那里解决的。很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2013-07-22
相关资源
最近更新 更多