0

我需要创建一个具有以下功能的大写 jQuery 插件:

  • 自动大写每个单词
  • 当用户按下退格键时,他仍然可以更正字符,例如他键入“John Mayer”,但他决定“Mayer”不应该是大写字母,因此他将其更改为“mayer”带退格键。

到目前为止我尝试了什么:

field.on('keyup change', function(e){
  var val = field.val();

  field.val(val.replace(/^(.)|\s(.)/g, function($1){ return $1.toUpperCase( ); }));
});

问题是,正则表达式解析整个值,但只应解析键入的新字符。

谢谢阅读

4

4 回答 4

1

像这样的东西,我认为它可以工作,尽管当我在笔记本电脑上按退格键时我似乎没有得到键码:S

这个想法是您从文本创建一个数组,操作最后一个单词lword(数组的最后一个元素)然后将数组作为字符串放回输入框/文本区域

$('input')​.keypress(function(e) {
    var $t = $(this);
        key = e.keyCode,
        txt = $t.val().split(' '),
        lword = txt[(txt.length - 1)];

    function replace() {
        txt[(txt.length - 1)] = lword;
        $t.val(txt.join(' '));
    }

    function undo() {
        lword = lword.toLowerCase();
        replace();
    }

    function capitalize(n) {
        lword = lword.charAt(n).toUpperCase() + lword.slice(n+1);
        replace();
    }

    if (key === 8) {
        undo();
    } else if (key === 32) {
        capitalize(0);
    }

});​​​

演示

于 2012-07-14T11:47:02.523 回答
0

自动资本化每个世界的第一个世界

//usage
$("input").keyup(function() {
toUpper(this);
});


//function
function toUpper(obj) {
var mystring = obj.value;
var sp = mystring.split(' ');
var wl=0;
var f ,r;
var word = new Array();
for (i = 0 ; i < sp.length ; i ++ ) {
f = sp[i].substring(0,1).toUpperCase();
r = sp[i].substring(1).toLowerCase();
word[i] = f+r;
}
newstring = word.join(' ');
obj.value = newstring;
return true;
}
于 2014-04-06T05:57:58.583 回答
0

这在 Chrome 中效果很好,但不幸的是,这在 Firefox 中似乎并不可靠。我能够解决这个使用模糊的解决方案。似乎适用于所有浏览器。

HTML

<label>Address 1</label>
<input name="addressaddress1" id="addressaddress1" value=""
size="25" />

<label>Address 2</label>
<input name="addressaddress1" id="addressaddress1" value=""
size="25" />

Javascript

$.fn.capitalize = function (e) {
    $.each(this, function () {
        if( $('body').data(this.id) != this.value )
        {
            var split = this.value.split(' ');
            for (var i = 0, len = split.length; i < len; i++) {
                split[i] = split[i].charAt(0).toUpperCase() + split[i].slice(1);
            }
            this.value = split.join(' ');
        }
    });

    return this;
};

$('[id^=address]').on('blur', function (e) {
    $(this).capitalize();
});

http://jsfiddle.net/bsegovia/V4ATc/31/

更新!!这个先前的解决方案没有解决所有大写输入。请参阅此 jsfiddle 以获取更正的脚本。http://jsfiddle.net/bsegovia/V4ATc/

于 2013-02-08T20:45:11.650 回答
0

经过一番挣扎后,我自己修复了它,但这是我的解决方案:

var doCap = false;

$('input').keydown(function(e) {
    var input = $(this);
    var val = input.val();

    if(doCap){
        var lastVal = val.substr(val.length - 1);

        if(lastVal !== " "){
            input.val(val.substring(0, val.length - 1) + lastVal.toUpperCase());
            doCap = false;
        }
    }
});

$('input').keypress(function(e){
    var input = $(this);
    var key = e.keyCode;
    var val = input.val();

    // Capitalize first character ever typed.
    if(val.length === 1){
        input.val(val.substr(0, 1).toUpperCase() + val.slice(1));
    }

    if(key === 32){

        // Prevent double spaces.
        if(val.substr(val.length - 1, 1) === " "){
            return false;
        }

        doCap = true;
    }
});​

http://jsfiddle.net/u4pxA/4/

感谢所有的反馈,帮助。

于 2012-07-15T15:14:08.210 回答