0

编辑:对于在提出这个问题时犯同样错误的任何人,请在下面查找我的修改后的答案,该答案展示了一个更清洁的解决方案来解决这个问题。

尝试允许用户输入 2 位或 4 位日期格式,并允许两者都通过验证,但使用 4 位等效值自动更正 2 位格式,假设前 2 位数字应与当前前 2 位数字相同。

我在使用 javascriptreplace()函数时遇到问题。这一行:

            input.replace(enteredDate, year);

没有按预期工作。spine.js在我使用的框架的上下文中,在操纵应该进行验证的字段时,在其他任何地方都input引用$(event.target)并且似乎是正确的。input最终,我想用完全连接的字符串替换在输入字段中找到的原始字符串(我还没有构建出来),但是现在,如何用分配的 var替换input(where input is ) 的内容这里:var = $(event.target)year

var year = currentYear.charAt(0) + currentYear.charAt(1) + unparsedYear;

这是到目前为止我所拥有的函数的完整代码,它在引用该.replace()行时引发以下错误 - Uncaught TypeError: Object [object Object] has no method 'replace'

validateDate: function(event) {

        var input = $(event.target);
        var enteredDate = input.val();

        input.destroyValidationMessage();

        var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{2})|(\d{4})$/;
        var result = enteredDate.match(pattern);

        if (result !== null) {
            var month = parseInt(result[1], 10);
            var day = parseInt(result[2], 10);
            var year = parseInt(result[3], 10);

            var unparsedYear = parseInt(result[3], 10);
            var unparsedYearStrLength = unparsedYear.toString().length;
            if ( unparsedYearStrLength < 4) {
                var currentYear = new Date().getFullYear().toString();

                var year = currentYear.charAt(0) + currentYear.charAt(1) + unparsedYear;
                alert('Autocorrected year will be ' + year);
                input.replace(enteredDate, year);
            }

            var date = new Date(year, month - 1, day);
            var isValid = date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;

        } else {
            input.createValidationMessage('Invalid Date');
            input.addClass('invalid'); 
        }
    }
4

1 回答 1

1

正如我在上面的评论中提到的:

input是一个 DOM 元素,但您实际上想要替换元素的内容与元素本身,所以使用input.val(new_value)而不是实际input元素。

于 2012-04-13T17:45:37.320 回答