0

イニシャルのフィールドを自動修正したいのですが、知識が限られているため、1時間の試行錯誤の末、入力を大文字にする小さなスクリプトしかありません。私が欲しいのはこれです:

  • aはAになります(大文字でドットで終わります)

  • AbCはABCになります(大文字でドットで区切られます)

  • A1BC_ *はABCになります(他の文字は使用できません。大文字でドットで区切ります)

私が持っているのはこれです:

    $(".hoofdletters").keyup(function(e)
    {
        $(".hoofdletters").val(($(".hoofdletters").val()).toUpperCase());
    });

アップデート

誰かの時間を無駄にして新しいトピックを開きたくないので、ここで試してみます。文中のすべての単語を自動的に大文字にするために、自分でも何かを試しました。すべてが機能していますが、何らかの理由でスペースが削除されます。これは + ''、何も機能しないことを削除した場合、スペースを追加した場合、すべての文字の後にスペースを取得し、このままにしておくと、スペースは許可されないことと関係があります。

誰か提案はありますか?

$('.cap').bind('textchange', function (event, previousText) {
        var val = this.value;
        var newVal = '';
        val = val.split(' ');
        for(var c=0; c < val.length; c++) {
                 newVal += val[c].substring(0,1).toUpperCase() +
 val[c].substring(1,val[c].length) + ''; // It has something to do with this line
        }
        this.value = newVal;
    });​
4

4 に答える 4

3

フィドル

$(document).ready(function() {
    $(".hoofdletters").focus(function() {
        var current = $(".hoofdletters").val();
        $(".hoofdletters").keyup(function(e) {
            var key = String.fromCharCode(e.keyCode);
            console.log(e.keyCode);
            if (key >= 'A' && key <= 'Z') {
                current += key + ".";
                this.value = current;
            }
            else if (e.keyCode == 8) {
                current = $(".hoofdletters").val();

            } else {
                current = "";
            }
        });
        $(".hoofdletters").blur(function() {
            var i = $(".hoofdletters").val();
            var last = i[i.length - 1];
            if (last != "." && i.length !== 0) {
                this.value += ".";
            }
        });
        $('.hoofdletters').keydown(function(e) {
            var i = $(".hoofdletters").val();
            if (e.keyCode == 8 && i.charAt(i.length - 1) == ".") {
                $(".hoofdletters").val(i.slice(0, -1));
                current = $(".hoofdletters").val();
            }
        })
    });
});​
于 2012-11-01T15:44:31.613 に答える
1

This should work:

Code:

$(".hoofdletters").keydown(function(e) {
    var c = String.fromCharCode(e.which).toUpperCase();
    if(c >= 'A' && c <= 'Z') {
        this.value += c.toUpperCase() + ".";
        return false;
    }
    return false;
});​

Demo: http://jsfiddle.net/aHq4b/


Note: The above strategy has the following limitations.

  • It completely blocks regular actions like delete/backspace etc. as we are completely controlling the keydown event, leaving nothing to the browser to perform.
  • It always appends the character at the end, instead of inserting at the cursor position
  • It doesn't support paste action

The following should rectify those as well. It uses zurb's textchange event which fires whenever text changes regardless of the means (pase/type/text-drag-drop etc.)

Code:

$('.hoofdletters').bind('textchange', function (event, previousText) {
    var t = this.value;
    var newValue = '';
    for(var i = 0; i < t.length; i++) {
        var c = t.charAt(i).toUpperCase();
        if(c >= 'A' && c <= 'Z') {
            newValue += c + '.';
        }
    }
    this.value = newValue;
});​

Demo: http://jsfiddle.net/aHq4b/1/

于 2012-11-01T15:20:29.843 に答える
1

ここはあなたのためにコードを書く人を見つける場所ではないので、問題に取り組むためにあなたが従うことができる計画をあなたに与えましょう。その後、途中で問題が発生した場合は、もっと具体的な質問をしてここに戻ることができます。

  • 出力を格納するために変数を使用します。この変数は空の文字列として始まります
  • あなたはすべての文字をループします
    • 文字が許可されている場合は、その大文字バージョンを出力変数の最後に追加します
  • 入力ボックスの新しい値を出力変数と同じに設定します。
于 2012-11-01T15:19:08.420 に答える
0

あなたが少し短いコードが好きなら、おそらくこれはあなたのために働くでしょう。

string.replace(/([a-z])([^a-z]*)/gi, '$1.').toUpperCase();

以下の例...

var string = 'a';
string.replace(/([a-z])([^a-z]*)/gi, '$1.').toUpperCase();
=> A.

var string = 'AbC';
string.replace(/([a-z])([^a-z]*)/gi, '$1.').toUpperCase();
=> A.B.C.

var string = 'A1BC_*';
string.replace(/([a-z])([^a-z]*)/gi, '$1.').toUpperCase();
=> A.B.C.    
于 2015-07-31T19:10:46.907 に答える