我正在尝试使用Knockout获取下拉菜单的选定文本,但问题是,value
绑定返回的值是所选选项的文字value=""
,这只是一个数字ID(考虑到我试图显示名称(存储在文本中)而不是ID,这不是很有用。
例如,这是我的DOM结构:
<select data-bind="options: siteUsers, optionsText: 'UserName', optionsValue: 'UserId', optionsCaption: 'Select...', value: addedUserId"></select>
我希望addedUserId
成为该选项的文字文本(即UserName
,而不是UserId
)。我该怎么取这个?
我必须使用计算机吗?如果是这样,我将如何实现这样的功能?
答案 0 :(得分:0)
只需将optionsValue更改为'UserName'。
<select data-bind="options: siteUsers, optionsText: 'UserName', optionsValue: 'UserName', optionsCaption: 'Select...', value: addedUserId"></select>
否则,您可以使用ID循环选项并找到所选名称。
答案 1 :(得分:0)
如果我正确理解了您的问题,那么当您在下拉列表中选择某些内容时,您需要SelectedText
之类的内容。
在这种情况下,您只需订阅value
绑定addedUserId
self.optionstext=ko.observable();
self.addedUserId.subscribe(function(selVal){ //selVal is alias of `optionsValue`
//if needed check undefined condition further
var data = ko.utils.arrayFirst(self.siteUsers(),function(item){
if(selVal === item.UserId())
{return true;} else {return false;}
});
if(data != [])
self.optionstext(data[0].UserName());
});
您也可以使用computed
,但订阅最适合提高效果。