У меня есть форма, где я использую KnockoutJS для динамического заполнения нескольких цепочек SELECT OPTIONS, но когда я submit форма, выбранные значения не включены в запрос GET на сервер. Вот пример HTML, который имеет регулярный HTML и опционов, Нокаут SELECT:Выберите параметры, отсутствующие после отправки HTML-формы
<form name=mainForm action="" method="GET" data-bind="submit: onSubmit">
<input type=hidden name=hiddenId />
<select name=htmlSelectName>
<option>One</option>
<option>Two</option>
<option>Three</option>
</select>
<select name=koSelectName id=koSelectId
data-bind="options: myOptions,
optionsCaption: 'Select...',
optionsText: 'optionText',
value: 'optionId'">
</select>
<input type="submit" value="Submit">
</form>
<script src="koViewModel/hidden.js" type="text/javascript"></script>
С запросом GET, вы можете увидеть параметры из htmlSelect установлены обратно на сервер, но раздел koSelect не отправляется по умолчанию. Я написал onSubmit связывания, который копирует значения koSelect в скрытом поле, который не отправлялись обратно на сервер:
var selectOptions = [
{
optionId : "A100",
optionText: "Option A",
},
{
optionId : "B200",
optionText: "Option B",
}
];
var viewModel = function(someOptions) {
var self = this;
self.myOptions = someOptions;
self.selectedOption = ko.observable();
console.log("Sending Option: " + self.selectedOption);
self.onSubmit = function() {
var k = document.getElementById("koSelectId");
document.mainForm.hiddenId.value = selectOptions[k.selectedIndex-1].optionId;
alert("Got Knockout Option ("+k.selectedIndex+"): " + k.options[k.selectedIndex].text);
console.log("Got Knockout Option ("+k.selectedIndex+"): " + k.options[k.selectedIndex].text);
console.log("Got Knockout Value ("+k.selectedIndex+"): " + document.mainForm.hiddenId.value);
confirm("Click OK after reviewing the console output. Then examine the GET params.");
return true;
}
}
ko.applyBindings(new viewModel(selectOptions));
Результат со строкой GET запроса является:
myapp?hiddenId=A100&htmlSelectName=Three&koSelectName=
Но есть более простой способ получить варианты выбора KO, возвращенные при отправке без копирования в скрытое поле?