【问题标题】:Populating select field by given dictionary按给定字典填充选择字段
【发布时间】:2015-09-19 16:31:46
【问题描述】:

我找到了一个通过给定的 html 字符串填充选择字段的示例:

<script>
$(document).ready(function() {

    $("#shape").change(function() {
        var val = $(this).val();
        $("#size").html(options[val]);
    });

    var options = [
        "<option value='test'>item1: test 1</option><option value='test2'>item1: test 2</option>",
        "<option value='test'>item2: test 1</option><option value='test2'>item2: test 2</option>",
        "<option value='test'>item3: test 1</option><option value='test2'>item3: test 2</option>"
    ];

});
</script>

哪个工作正常,但我必须如何更改脚本才能对给定字典执行相同操作?

options = {
    'ipe': ['80', '100'],
    'hea': ['90', '110'],
}

这里有一张图片来说明:

这里是我的 html sn-p:

<div class="panel panel-primary">
  <div class="panel-body">
    <table>

<tr>
  <td>{{ form.shape.label }}</td>
  <td>{{ form.shape(class="form-control field", id="shape") }}</td>
  <td>{{ widgets.errors(form.shape.errors) }}</td>
</tr>

<tr>
  <td>{{ form.size.label }}</td>
  <td>{{ form.size(class="form-control field", id="size") }}</td>
  <td>{{ widgets.errors(form.size.errors) }}</td>
</tr>

    </table>
  </div>
</div>

【问题讨论】:

  • “我如何更改脚本以对给定的字典执行相同的操作?” #size 内的 html 预期结果是什么?
  • 选择字段#shapes 提供了通过选择应填充选择字段#size 的所有键
  • 是否应该用option 元素填充#size 元素,该元素具有对应于#shape 值的值数组中的每个项目的值?
  • 是的,#shape 提供密钥 ['ipe', 'hea'] 并通过选择即 'ipe' 然后 #size 应填充 ['80', '100']
  • "是的,#shape 提供了键 ['ipe', 'hea'] 并且通过选择 i.e 'ipe' 然后 #size 应该填充 ['80', '100' ]" 。可以包含html#size 吗?预期结果文本 ['80', '100']#size 内?还是两个 option 元素的值分别为 "80""100"

标签: jquery python html flask wtforms


【解决方案1】:

尝试使用Array.prototype.map()Array.prottotype.join()

var options = {
  "ipe": ["80", "100"],
  "hea": ["90", "110"]
};

$("#shape").change(function() {
  var val = options[this.value];

  $("#size").html(function() {
    return val.map(function(el) {
      return $("<option>", {
        "name": el,
        "value": el,
        "html": el
      })[0].outerHTML
    }).join("");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<label>Shape:
  <select id="shape">
    <option>select an option</option>
    <option name="ipe" value="ipe">ipe</option>
    <option name="hea" value="hea">hea</option>
  </select>
</label>
<label>Size:
  <select id="size">
  </select>
</label>

【讨论】:

  • 非常感谢您的帮助。我试图实现但得到以下错误:TypeError: Cannot read property 'map' of undefined
  • @ericMTR "试图实现但得到以下错误:TypeError: Cannot read property 'map' of undefined" 在上面的 stacksn-ps 的js 返回错误?用var val = options[this.value]; 替换var val = $(this).val(); ? 可以创建jsfiddlejsfiddle.net来演示,重现错误吗?
  • @guest271314 如果我使用你的htmlsn-p,它工作得很好。但不适用于我的。我将很快更新我的 OP 以显示不同之处。我使用 wtforms,所以我无法在 jsfiddle I gess 显示它。
  • @guest271314 我替换了var val = options[this.value]; for var val = $(this).val(); 并得到以下错误:TypeError: val.map is not a function
  • 发现错误!钥匙确实不匹配。 wtform 只给出选择的索引而不是键本身。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多