0

編集:この質問をする際に私がしたのと同じ間違いを犯した人は、この問題に対するよりクリーンな解決策を示す以下の修正された回答を探してください。

2 桁または 4 桁の日付形式のユーザー入力を許可し、両方が検証に合格することを許可しようとしていますが、先頭の 2 桁が現在の先頭の 2 桁と同じであるという前提で、2 桁の形式を 4 桁に相当する値で自動修正します。

replace()javascript関数で困っています。この行:

            input.replace(enteredDate, year);

期待どおりに動作していません。spine.js私が使用しているフレームワークのコンテキストでは、検証が発生する必要があるフィールドを操作する際に、他の場所をinput参照して$(event.target)正しいように見えます。最終的には、入力フィールドで見つかった元の文字列を完全に連結されたもの (まだ作成していません) に置き換えたいのですが、今のところ、(input isの場合) の内容を割り当てられた varinputに置き換えるにはどうすればよいですか?ここ:inputvar = $(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要素ではなく and を使用してください。

于 2012-04-13T17:45:37.320 に答える