0

ここに簡単なシナリオがあります

1) AJAX を使用してサイト ページをナビゲートしています。UIの見栄えを良くするためだけに(アニメーションなど)

2) ユーザーが認証されていない場合は、AJAX 経由でログイン フォームを読み込みます。そのフォームには、次の単純なコードが含まれています

$('#ajaxform').validate(
{
   rules: {
      login: {
         minlength: 2,
         required: true
      },
      password: {
         required: true,
         minlength: 2
      }
   },
   highlight: function (element) {
      $(element).removeClass('success').addClass('error');
   },
   success: function (element) {
      element.addClass('valid').removeClass('error').addClass('success');
      $('label.valid.success').remove();
   }
});

3) ここに問題があります - ユーザーがそのフォームに入力して自分自身を認証する代わりに、AJAX を介してそのログイン フォームを再びロードする任意の要素をクリックすると、the validation is not working anymore.

なんで ?

私は使用しようとしまし$("#ajaxform").unbind('validate');$('#ajaxform').validate(...);が、成功しませんでした。

4

2 に答える 2

1

問題は、.validate()必要なものを初期化するために DOM で 1 回だけ呼び出す必要があることです。あなたのケースでは、すでに初期化されているものに対して再度呼び出されています。私の提案は、問題の解決策ではなくハックです。 from を表示するときは、ログインレイヤーを表示するときにページの残りの部分を無効にして、ユーザーが他の場所をクリックできないようにすることができます。

于 2013-11-05T16:27:54.467 に答える
1

わかりました。私のログインフォームにはid='myForm属性がありました。私はそれを置き換えclass='myForm、検証コードをに変更しました

$('form.myForm').last().validate(
        {
            rules: {
                login: {
                    minlength: 2,
                    required: true
                },
                password: {
                    required: true,
                    minlength: 2
                }
            },
            highlight: function (element) {
                $(element).removeClass('success').addClass('error');
            },
            success: function (element) {
                element.addClass('valid').removeClass('error').addClass('success');
                $('label.valid.success').remove();
            }
        });

現在は機能していますが、私の意見では、これは最善のアプローチではありません (ただし、目的が手段を正当化する場合もあります)。

于 2013-11-05T16:52:32.940 に答える