如何防止 knockout.js 在应用绑定时删除 FireFox 预填充的表单字段值
How to prevent knockout.js from deleting form field values prefilled by FireFox when applying bindings
FireFox 在加载页面后在输入框中预填某些表单值(例如用户名等...)。
如果我将 Knockout.js 绑定应用于预填表单,在应用绑定时,Knockout 将清除输入字段(导致短暂闪烁)。
有没有办法保留预填充的值而不是删除它们?
var UserModel = function() {
this.username = ko.observable();
this.password = ko.observable();
this.passwordRepeat = ko.observable();
....
}
....
domReady(function() {
//values prefilled by FireFox in input box bound to username are
//erased after applyBindings is executed
ko.applyBindings(new UserModel());
});
您可以使用自定义绑定,或 overwrite/extend textInput and/or 值绑定来使用 DOM.
中的值初始化可观察对象
// w/ custom binding
ko.bindingHandlers.prefilledText = {
init: function(el, valueAccessor) {
// set initial value
var initVal = $(el).val()
valueAccessor()(initVal)
// apply normal textInput binding
ko.applyBindingsToNode(el, {
textInput: valueAccessor()
})
}
}
// w/ extended textInput binding
// save reference to initial binding
var _textInputBinding = ko.bindingHandlers.textInput
ko.bindingHandlers.textInput = {
init: function(el, valueAccessor) {
// set initial value, same as before
var initVal = $(el).val()
valueAccessor()(initVal)
// pass on to the regular textInput binding
_textInputBinding.init.apply(this, arguments)
},
// don't forget the update function either!
update: _textInputBinding.update
}
还有一个fiddle!
FireFox 在加载页面后在输入框中预填某些表单值(例如用户名等...)。
如果我将 Knockout.js 绑定应用于预填表单,在应用绑定时,Knockout 将清除输入字段(导致短暂闪烁)。
有没有办法保留预填充的值而不是删除它们?
var UserModel = function() {
this.username = ko.observable();
this.password = ko.observable();
this.passwordRepeat = ko.observable();
....
}
....
domReady(function() {
//values prefilled by FireFox in input box bound to username are
//erased after applyBindings is executed
ko.applyBindings(new UserModel());
});
您可以使用自定义绑定,或 overwrite/extend textInput and/or 值绑定来使用 DOM.
中的值初始化可观察对象// w/ custom binding
ko.bindingHandlers.prefilledText = {
init: function(el, valueAccessor) {
// set initial value
var initVal = $(el).val()
valueAccessor()(initVal)
// apply normal textInput binding
ko.applyBindingsToNode(el, {
textInput: valueAccessor()
})
}
}
// w/ extended textInput binding
// save reference to initial binding
var _textInputBinding = ko.bindingHandlers.textInput
ko.bindingHandlers.textInput = {
init: function(el, valueAccessor) {
// set initial value, same as before
var initVal = $(el).val()
valueAccessor()(initVal)
// pass on to the regular textInput binding
_textInputBinding.init.apply(this, arguments)
},
// don't forget the update function either!
update: _textInputBinding.update
}
还有一个fiddle!