0

我想自动更正首字母的字段,但我的知识有限,所以经过一个小时的反复试验,我所拥有的只是一个将输入大写的小脚本。我想要的是这样的:

  • 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

这应该有效:

代码

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

演示:http: //jsfiddle.net/aHq4b/


注意:上述策略有以下限制。

  • 它完全阻止了删除/退格等常规操作,因为我们完全控制了 keydown 事件,没有任何东西可以让浏览器执行。
  • 它总是在末尾追加字符,而不是在光标位置插入
  • 它不支持粘贴操作

以下也应该纠正这些。它使用 zurb 的 textchange 事件,该事件会在文本发生变化时触发,无论使用何种方式(pase/type/text-drag-drop 等)

代码

$('.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;
});​

演示: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 回答