动态创建的下拉列表不能提供正确的值

时间:2014-06-05 11:38:42

标签: javascript data-binding knockout.js

我有一个奇怪的问题。我有一个confectionoptions列表。这些confectionoptions中的每一个都有一个属性,其中包含可以设置的选项列表。如果此选项在其属性IsSelected中的值为true,那么我知道这是一个。

这是我的HTML,如果我改变一个值,我只得到它自己的总对象!我需要选择值,我该怎么做?我已经尝试了一个额外的淘汰可观察属性,我设置了值,但这会导致我不想要的问题(这就是为什么这是一个问题)

<div>
    <div class="content" data-bind="visible: (InstoreConfectionOptions().length > 0)">
        <h3 data-bind="visible: (InstoreConfectionOptions().length > 0)">
            <span class="clean">Instore confectie opties</span>
        </h3>

        <span data-bind="foreach: InstoreConfectionOptions">
            <h4 data-bind="text: Name + ':'"></h4>
            <select data-bind="foreach: Options, 
                               event: { change: $root.SetInstoreOption }">
                <option data-bind="text: Name"></option>
            </select>
            @*<select data-bind="options: Options, 
                                 optionsText: 'Name', 
                                 value: $root.testtest ">
              </select>*@
            @*<select data-bind="//options: Options, optionsText: 'Name', event:{change: function(){ $root.SetInstoreOption($data) } }">
              </select>*@
            @*<select data-bind="options: Options, 
                                 optionsText: 'Name', 
                                 event: { change: $root.SetInstoreOption }">
              </select>*@
        </span>
    </div>
</div>

然后在我的JS中我想要选择的值,而不是整个东西只是选择的值。我该怎么做?

self.SetInstoreOption = function(options) {
        for (var i = 0; i < options.Options.length; i++) {
            if (options.Options[i].Selected) {
                setOptionValue(options.Options[i]);
                break;
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

如果你像这样声明你的绑定(如你的例子):

<select data-bind="options: Options, 
                   optionsText: 'Name', 
                   value: $root.testtest ">
</select>

这意味着:

  • select将填充Options内的对象(比如obj
  • option s代码将obj.Name作为文字
  • 当您选择option时,可观察的$root.testtest将设置为obj

因此,您可以使用$root.testtest()获取所选对象。

检查 documentation here

更新

在你的情况下,因为你已经在循环中,所以不要将值设置为根元素:

<select data-bind="options: Options, 
                   optionsText: 'Name', 
                   value: selectedOpt ">
</select>

selectedOpt需要成为confection的观察对象。

选中 example

答案 1 :(得分:0)

你可以试试这个:

var text = $("#select option:selected").text(); // to select the text

//或

var value = $("#select option:selected").val(); // to select the value

希望它有所帮助。