3

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

这是我拥有的代码以及指向它的Jsfiddle 链接

<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 中看到输入跳动并且无法正常工作。谁能帮助我或推荐一个最好的方法来做到这一点?谢谢你。

4

2 回答 2

1
$(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

于 2013-03-12T01:04:17.760 回答
1
$(document).ready(function() {

    $(".capitalize")
    .keyup(function(event) {
        var key = event.keyCode || event.charCode;
        // store the key which was just pressed
        $(this).data('last-key', key);
    })
    .keypress(function(event) {
        var key = event.keyCode || event.charCode;
        var lastKey = $(this).data('last-key') ? $(this).data('last-key') : 0;  // we store the previous action
        var $this = $(this); // local reference to the text input
        var str = $this.val(); // local copy of what our value is
        var pos = str.length;
        if(null !== String.fromCharCode(event.which).match(/[a-z]/g)) {
            if ((pos == 0 || str.substr(pos - 1) == " ") && (!(lastKey == 8 || lastKey == 46))) {
                event.preventDefault();
                $this.val($this.val() + String.fromCharCode(event.which).toUpperCase());
            }
        }
        // store the key which was just pressed
        $(this).data('last-key', key);
    });

});

我已经更新了你的小提琴http://jsfiddle.net/nB4cj/4/这将显示这个工作。

于 2013-03-12T02:39:24.790 回答