javascript - 如何使用 KnockoutJS 将选定字段的文本更改为大写?

标签 javascript knockout.js

我的应用程序所有者希望选择的文本字段为大写,就像打开大写锁定一样。我正在为这些字段使用带有可观察对象的 KnockoutJS View 模型。有没有一种方法可以有效地将任何用户输入的文本转换为大写?

我在我想更改的控件上放置了一个 input 事件,但发现虽然它有效,但 observables 没有更新。

<input type="text" maxlength="80" data-bind="value: colorName, disable: $parent.isReadOnly, event: { 'input': toUpper }" />

toUpper: function (d, e) {
    if (e.target) {
        if (e.target.value) {
            e.target.value = e.target.value.toUpperCase();
        }
    }
}

我也一直在考虑将 ucase CSS 类放在我想要大写的控件上,然后在客户端或服务器上,将这些字段保存为大写。

.ucase {
    text-transform: uppercase;
}

最佳答案

你可以扩展你的 observables -

<input data-bind="value: colorName, valueUpdate:'afterkeydown'" />

ko.extenders.uppercase = function(target, option) {
    target.subscribe(function(newValue) {
       target(newValue.toUpperCase());
    });
    return target;
};

var colorName = ko.observable().extend({ uppercase: true });

fiddle 示例 - http://jsfiddle.net/kbFwK/

基本上,只要值发生变化,它就会将可观察值的值转换为大写。

这里的缺点是它实际上改变了值并以这种方式存储它。您也可以出于显示目的将计算属性附加到可观察对象上。您可以使用 ko.computed、自定义绑定(bind)处理程序(因为它仅用于演示)或类似的东西来做到这一点。如果那是您正在寻找的更多内容,请通过评论告诉我。

编辑

使用 afterkeydown 更新 - http://jsfiddle.net/kbFwK/2/

关于javascript - 如何使用 KnockoutJS 将选定字段的文本更改为大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24871041/

相关文章:

javascript - 如何转义 Google BigQuery 的 JavaScript UDF 中的字符?

javascript - 当有人安装我的 npm 模块时,如何告诉 npm 不要安装任何依赖项?

javascript - 类型错误 : Failed to execute 'removeChild' on 'Node' : parameter 1 is not of type 'Node' in React

javascript - 什么时候将 CSS 样式应用于 DOM?

javascript - Codemirror 和 Knockout 之间的集成

javascript - Angular 5 : Can't Resolve All Parameters for e: (? )

javascript - IE 11 忽略动态生成的 html 页面的 appendChild()

javascript - ko.utils.extend 不会覆盖模型中的属性

javascript - 使用下拉菜单更改多个文本框

javascript - Knockout JS - 获取模式弹出窗口以编辑项目