gpt4 book ai didi

javascript - knockout 多选 selectedOptions 包含值而不是对象

转载 作者:行者123 更新时间:2023-11-29 10:14:57 34 4
gpt4 key购买 nike

我有一个属性为 multiple 的选择。对于选择中的每个选项,我想要设置 title 属性(显示工具提示)。我还想将选定的选项作为对象数组检索。除了所选选项不返回对象数组而是返回 valueText 数组这一事实外,我设法得到了我想要的东西。我不知道如何在该数组中获取对象。

这是我目前得到的代码:

HTML:

<select multiple style="width: 150px;" size=15 
data-bind="foreach: options, selectedOptions: selectedOptions">
<option data-bind="text: Name, attr: { 'title': Name}"></option>
</select><br />
<button data-bind="click: showSelectedOptions">Show selection</button>

Javascript:

function Option(id, name){
var self = this;

self.Id = id;
self.Name = name;
}

function ViewModel(){
var self = this;

self.options = ko.observableArray([
new Option(0, "NormalText"),
new Option(1, "AnotherText"),
new Option(2, "WaaaaaaaaaaaaaaaayTooLongText")
]);
self.selectedOptions = ko.observableArray([]);

self.showSelectedOptions = function(){
alert(self.selectedOptions());
//what I would like to have:
//if (self.selectedOptions().length > 0)
// alert(self.selectedOptions()[0].Name);
}
}

ko.applyBindings(new ViewModel());

以及用于演示的 fiddle 链接:http://jsfiddle.net/c63Bb/1/

我需要添加或更改什么才能使数组 selectedOptions 包含对象而不是字符串?

最佳答案

像这样尝试你的 html

<select 
data-bind="
options: options,
selectedOptions : selectedOptions,
optionsText: 'Name',
optionsCaption: 'Choose...'
"
size="5" multiple="true"></select>

Demo

查看控制台输出

编辑:

要为选项添加属性,您需要使用 optionsAfterRender
这仅在版本 3.1.0 中可用。我注意到您的 fiddle 使用的是 3.0.0。

<select 
data-bind="
options: options,
selectedOptions : selectedOptions,
optionsText: 'Name',
optionsAfterRender: $root.setTitle
"
size="5" multiple="true"></select><br />
<button data-bind="click: showSelectedOptions">Show selection</button>

并创建一个函数

self.setTitle = function(option, item) {
option.title = item.Name
}

Demo

Reference

见注释 2

关于javascript - knockout 多选 selectedOptions 包含值而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24303689/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com