我有一個表單,用戶應該輸入大量重複的數據實例,並且我希望用戶能夠以最小的努力完成此操作。它有點類似於一個嚮導。替代方法來檢測Knockout.js中已更改的選擇選項
我希望當一個實例的所有輸入和選擇都完成時,用戶不需要單擊一個單獨的按鈕,而是當表單完成時自動提交表單。
我使用敲除,與options
綁定。我目前的做法是使用敲除computed
,它會檢查表單中的所有字段,並在所有字段具有有效值時自動提交。
我的實際形式和驗證碼是一個有點複雜,但這個簡單的例子說明了什麼我想實現:
<input type="text" id="theText" data-bind="value: text" />
<select id="theSelect" data-bind="options: options, value: selected, optionsText: 'text', optionsCaption: 'Please select'">
</select>
<div id="added" data-bind="foreach: added">
<span data-bind="text: text"></span>:<span data-bind="text: selected.text"></span><br/>
</div>
和相應的javascript:
function ViewModel() {
var self = this;
this.text = ko.observable('');
this.selected = ko.observable(null);
this.added = ko.observableArray([]);
this.options = [{value: 1, text: "Number one"}, {value: 2, text: "Number two"}, {value: 3, text: "Number three"}];
this.add = ko.computed(function() {
var text = self.text();
var selected = self.selected();
if (text !== '' && selected) {
self.added.push({
text: text,
selected: selected
});
self.text('');
self.selected(null);
}
});
}
ko.applyBindings(new ViewModel());
jsFiddle here表示本實例。當文本字段和select都有值時,將在它們下面添加一個新行,並將它們重置爲空。
這種方法或多或少的作品,但它有點神奇。當我嘗試使這種形式僅使用鍵盤可用時(爲了使用戶的工作速度更快),它也給了我一些問題。
有關此方法問題的示例,請嘗試在文本框中輸入內容並使用Tab鍵移至選擇內容。然後嘗試用鍵箭頭更改選定的值。由於這將觸發更改事件,因此將立即選擇第一個選項。 I have another question about this specific problem here
有沒有更好的方法來實現自動提交時,什麼都是有效的淘汰賽?
我不是要求箭頭鍵選擇問題的完整解決方案,而只是爲了我的一些替代起點。 ko.computed()
的替代品。
您的方法在技術上看起來很紮實。你對此有什麼保留?另外,如果你主要關注這是否是好的用戶體驗,那麼在我們的姊妹網站[UX.StackExchange](http://ux.stackexchange.com)上可能會有更好的運氣。 – Jeroen
@Jeroen在這個簡單的例子中,這種方法是可靠的。只要用戶使用鼠標點擊選擇,然後點擊正確的選項。但是,當我嘗試添加僅用鍵盤導航的可能性時,我卡住了。 –
當文本輸入爲空時,您可能需要添加'hasFocus'屬性以自動對焦。爲了提高鍵盤的可用性,您需要添加一個提交按鈕,否則,選擇並按下即可提交。 – FakeRainBrigand