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 上调用一次来初始化你想要的东西,在你的情况下,它会再次被调用来处理已经初始化的东西,我的建议是一个 hack 不是问题的解决方案,因为可能有更好的解决方案,但是您可能会喜欢它,当您显示来自时,在显示登录层时禁用页面的其余部分,以防止用户单击其他任何地方。

于 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 回答