0

私は英国の郵便番号に対して検証する必要がある単純なフォームに取り組んでいます。問題ありませんが、文字の長さに応じて検証する必要があります。ユーザーは、郵便番号の前半(つまり、SW1)または完全な郵便番号(つまり、SW1 1AB)のみを入力できます。

最善のアプローチは、KeyPressで長さを確認し、郵便番号の半分または全体について正規表現に対して検証することだと思いました。下記参照:

jQuery('.ValPostCode').keyup(
    function(){

        if (jQuery(this).length < 5){
            jQuery.validator.addMethod("ValPostCode", function(value, element) {
                return this.optional(element) || /([A-PR-UWYZa-pr-uwyz]([0-9]{1,2}|([A-HK-Ya-hk-y][0-9]|[A-HK-Ya-hk-y][0-9]([0-9]|[ABEHMNPRV-Yabehmnprv-y]))|[0-9][A-HJKS-UWa-hjks-uw]))/.test(value);
            }, "Please enter a valid postcode");                            
        } else if (jQuery('.ValPostCode').length > 4) {
             jQuery.validator.addMethod("ValPostCode", function(value, element) {
            return this.optional(element) || /^(GIR\\s{0,1}0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])\\s{0,1}[0-9][ABD-HJLNP-UW-Z]{2})$/.test(value);
            }, "Please enter a valid postcode");
        }

    });

したがって、charの長さが.ValPostCode5未満の場合は、英国の郵便番号の前半についてのみ検証されます。それ以外の場合は、完全で有効な英国の郵便番号をチェックします。

ある時点での長さを出力して.ValPostCodeいましたが、常に1(最初のキー押下)で停止し、それ以上続行しませんでした(つまり、後続のキー押下ではカウントされませんでした)。

私は自分自身を十分に明確に説明したと思います。私が明確でない場合は私に知らせてください。

自分でこれを修正するために同様の問題を検索しましたが、何も見つかりませんでした。助けていただければ幸いです。

4

2 に答える 2

3

$(selector).length(または)の長さは、jQuery(selector).length常に、指定されたセレクターに一致する画面上の要素の数になります。$(selector).val().lengthを使用してフォーム要素の値を取得し、代わりにその長さを確認してみてください。

于 2012-10-30T17:06:01.153 に答える
1

キーを押すたびに不必要にバリデータールールを設定しているようです

ページが最初に読み込まれるときは、次のように呼び出すだけで済みます。

jQuery.validator.addMethod("ValPostCode", function(value, element) {
    if(value.length < 5) {
        return (insert partial postcode check here);
    } else {
        return  (insert whole postcode check here);
    }
}, "Please enter a valid postcode");

そして、それを一度だけ呼び出す必要があります。JQueryは、構成方法に応じて、送信/変更時にエラーを検出します。

したがって、keyUpイベントは必要ありません。

(他の誰かがすでに指摘しているように)あなたが抱えていた主な問題は、value属性の長さではなくjQueryオブジェクトの長さを返していたことです。

于 2012-10-30T17:15:26.250 に答える