gpt4 book ai didi

javascript - 从加载的对象数组中选中复选框

转载 作者:行者123 更新时间:2023-11-30 17:47:07 27 4
gpt4 key购买 nike

我有一个这样的模型

function ViewModel(){
var self = this

self.Choices = ko.observableArray([])
self.AcceptedChoices = ko.observableArray([])

self.LoadData = function(){
self.ViewAnswered()
}

self.ViewAnswered = function(){
var url = 'QuestionsApi/ViewAnswered'
var type = 'GET'
ajax(url , null , self.OnViewAnsweredComplete, type )
}
self.OnViewAnsweredComplete = function(data){
var currentAnswer = data.Answer

self.Choices(currentAnswer.Choices)
self.AcceptedChoices(currentAnswer.AcceptedChoices)
}

self.LoadData()
}

这是我的对象。我删除了多余的东西

{
"AcceptedChoices": [94, 95],
"Choices": [{
"ChoiceId": 93,
"ChoiceText": "Never"
}, {
"ChoiceId": 94,
"ChoiceText": "Sometimes"
}, {
"ChoiceId": 95,
"ChoiceText": "Always"
}]
}

这里是绑定(bind)

<u data-bind="foreach:Choices">
<li>
<input type="checkbox" name="choice[]" data-bind="value:ChoiceId,checked:$root.AcceptedChoices">
<span data-bind="text:ChoiceText">Never</span>
</li>
</u>

现在的问题是,由于选项是对象数组,所以复选框没有被选中。我该如何解决这个问题?尽管同样的事情适用于只有一个选择的 radio 。

最佳答案

没关系,我在这里找到了解决方案

checked binding does not properly compare primatives

它还提供了两种方法。 fiddle 中提供的解决方案令人毛骨悚然,因此我将使用使用 knockout 版 3.0.0 的解决方案。

我需要做的就是附加 knockout-3.0.0.js 而不是任何其他文件,然后使用 checkedValue 而不是 value

<input type="checkbox" name="choice[]" 
data-bind="
checkedValue:ChoiceId,
checked:$root.AcceptedChoices"
>

这就完成了。希望对某人有所帮助。

编辑:

我注意到它不适用于 Chrome。所以我找到了一个替代方案。我创建了这两个函数。

self.ConvertToString = function(accepted){
var AcceptedChoices = []
ko.utils.arrayForEach(accepted, function(item) {
AcceptedChoices.push(item.toString())
})
return AcceptedChoices
}
self.ConvertToInteger = function(accepted){
var AcceptedChoices = []
ko.utils.arrayForEach(accepted, function(item) {
AcceptedChoices.push(parseInt(item))
})
return AcceptedChoices
}

并使用它们

self.AcceptedChoices(self.ConvertToString(currentAnswer.AcceptedChoices))

获取值

AcceptedChoices: self.ConvertToInteger(self.AcceptedChoices()),

关于javascript - 从加载的对象数组中选中复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19925196/

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