0

次の機能を備えたcapatalizationjQueryプラグインを作成する必要があります。

  • すべての単語を自動大文字化
  • ユーザーがバックスペースをヒットした場合でも、たとえば「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

苦労して自分で修正しましたが、これが私の解決策です。

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 に答える
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

各世界の最初の世界を自動資本化

//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 に答える