我有一个输入字段供用户填写,我想在输入单词时自动将每个单词的首字母大写。但是,如果他们手动删除一个大写字母并将其替换为小写字母,我希望保留它(基本上建议使用大写字母,但这不是必需的)。我在实现某些东西时会遇到麻烦,这些问题会使他们手动输入的字母独自留下而无法更改。

这是我的代码以及Jsfiddle link的代码。

<input class="capitalize" />

和JS:
lastClick = 0;

$(document).ready(function() {
$(".capitalize").keyup(function() {
            var key = event.keyCode || event.charCode;
        if (!(lastClick == 8 || lastClick == 46)) {
                //checks if last click was delete or backspace
            str = $(this).val();
                        //Replace first letter of each word with upper-case version.
            $(this).val(str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}));
        }
        lastClick = key;
    });
});

我不允许保留用户的手动更正,但是正因为如此,您可以在jsfiddle中看到输入跳来跳去并且无法正常工作。谁能帮我或推荐最佳方法吗?谢谢。

最佳答案

$(document).ready(function() {
    var last;

    $(".capitalize").on('keyup', function(event) {
        var key = event.keyCode || event.which,
            pos = this.value.length,
            value = this.value;

        if (pos == 1 || last == 32 && (last !== 8 || last !== 46)) {
            this.value = value.substring(0, pos - 1) +
                         value.substring(pos - 1).toUpperCase();
        }

        last = key;
    });
});

http://jsfiddle.net/userdude/tsUnH/1

07-24 17:56
查看更多