除了手动更换外,将句子中的第一个字母大写

时间:2013-03-12 00:40:13

标签: javascript jquery html

我有一个用户将填写的输入字段,我想在他们输入时自动将每个单词的第一个字母大写。但是,如果他们手动删除大写字母并用小写字母替换它,我希望保留(基本上大写字母是我们推荐的,但不是必需的)。我无法实现能够单独手动键入的字母,而不会更改它们。

以下是我的代码以及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中看到输入跳转并且无法正常工作。任何人都可以帮助我或建议一个最好的方法吗?谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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/,这将显示此工作。