重复字段上的自动更正行为很奇怪

时间:2013-01-03 15:12:00

标签: javascript jquery forms validation knockout.js

我有一个用户可以复制的表单,因此他们可以一次提交多个表单。这很好用。但是,我注意到用户没有以正确的方式使用它。例如,我要求缩写,人们填写他们的正名。 PHP会检查所有字段并在必要时自动更正它们,但这会将John变成J.O.H.N。

无论如何,一个好方法是autocorrectfields。这适用于初始表单,但在重复的表单上出错。特别是首字母很奇怪。我对jQuery和Javascript的了解非常有限,所以经过几周的困惑我仍然不知道如何解决它。欢迎提出建议。

小提琴:http://jsfiddle.net/QUxyy/15/

JS

// Lowercase
    $(".lowercase").keyup(function(e)
    {
        $(".lowercase").val(($(".lowercase").val()).toLowerCase());
        if (/[a-z]/g.test(this.value))
        {
            this.value = this.value.replace(/[^a-z ]/g, '');
        }

    });

    // Initials
    $(".initials").focus(function() {
        var current = $(".initials").val();
        $(".initials").keyup(function(e) {
            var key = String.fromCharCode(e.keyCode);
            if (key >= 'A' && key <= 'Z') {
                current += key + ".";
                this.value = current;
            }
            else {
                current = "";
            }
        });
    $(".initials").blur(function() {
        var i = $(".initials").val();
        var last = i[i.length - 1];
        if (last != "." && i.length !== 0){
            this.value += ".";
            }
        });
    });


    // Capitalize
    $(".cap").keyup(function(e)
    {
        function convertToUpper() {
        return arguments[0].toUpperCase();
         }
        val = this.value.toLowerCase().replace(/\b[a-z]/g, convertToUpper);
        this.value = val;

    });

Click for full code and preview

1 个答案:

答案 0 :(得分:1)

在你的回调事件中,.voorletters的处理函数使用'this',例如:

SEE DEMO

$(document).on("keydown", ".voorletters", function(e)  {
            var i = $(this).val();
            if (e.keyCode == 8 && i.charAt(i.length - 1) == ".") {
                $(this).val(i.slice(0, -1));
                current = $(this).val();
            }
        })

你应该把它作为.initials,.lowercase等所有的回调功能......