2012-06-19 118 views
3

我有一个简单的登录表单,并有jQuery验证替换字段标签,当有错误显示。问题是,一旦错误被清除,标签消失。我想找到一种方法来恢复到以前的标签的内容,或重建标签时字段是合法的......jQuery验证:验证后保留错误

这里是我的代码:

$(document).ready(function(){ 
    $("#login").validate({ 
     errorPlacement: function(error, element) { 
      element.prev().replaceWith(error); 
     }, 
     rules: { 
      "email": { 
       required: true, 
       email:true, 
      }, 
      "password": { 
       required: true, 
       minlength: 6 
      } 
     }, 
     messages: { 
      email: { 
       required: "Please enter your email address.", 
       email: "Please enter a <u>valid</u> email address" 
      }, 
      password: { 
       required: "Please enter your password.", 
       minlength: "Please enter a password with 6 characters or more." 
      } 
     }, 
    }); 
}); 

和HTML:

<form name="login" id="login" method="post" action="authenticate.php"> 
<p> 
    <label for="email">Email Address:</label> 
    <input type="text" name="email" id="email" class="required email" /> 
</p> 
<p> 
    <label for="password">Password:</label> 
    <input type="password" name="password" id="password" class="required" /> 
</p> 
<p> 
    <input type="submit" value="Log In" id="submit" /> 
</p> 

在本质上,当用户提交表单,如果有在电子邮件字段中没有数据,那么对于电子邮件标签获取与错误所取代。但一旦它有了有效的输入,我想要放回原始标签。

在此先感谢您的任何建议,

ž

+0

这是不可能的,但你可能会反复折腾'highlight'和'unhighlight'功能,并从这些保存关闭旧标签,并将其重新设置为“unighighlight”。 – Ryley

+0

感谢您的回复。我实际上已经做出了一个妥协,而不是用错误标签替换之前的标签,而是使用error.appendTo(element.prev())和errorElement:“span”将跨度添加到该标签中。 这并不理想,但至少出现跨度时,错误代码就是我想要的位置,当它消失时,标签保持不变。 我刚刚做了这样的标签和错误完成彼此像句子...例如,“电子邮件地址”“是必需的。”或“电子邮件地址”的格式不正确。“ (PS:很遗憾,看起来换行符不起作用) – Shikarnov

+0

啊,这是一个体面的解决方案,我同意......我建议你发布一个自己问题的答案,并将其标记为已接受(这是100 %确定在StackOverflow)。这样任何发现这个问题的人都会知道一个很好的答案。 – Ryley

回答

3

我实际上已经做出妥协,而不是用错误标签替换之前的标签,而是使用error.appendTo(element.prev())和errorElement:“span”在该标签中添加跨度。下面是新的代码:

  $(document).ready(function(){ 
      $("#login").validate({ 
       errorElement: "span", 
       errorPlacement: function(error, element) { 
        error.appendTo(element.prev()); 
        //element.prev().replaceWith(error); 
       }, 
       rules: { 
        "email": { 
         required: true, 
         email:true, 
        }, 
        "password": { 
         required: true, 
         minlength: 6 
        } 
       }, 
       messages: { 
        email: { 
         required: " is Required", 
         email: " is Improperly Formatted" 
        }, 
        password: { 
         required: " is Required", 
         minlength: " is not Long Enough" 
        } 
       }, 
      }); 
     }); 

这是不太理想,但至少跨度出现时,错误代码是我希望它是,当它消失,标签保持完好。我只是这样做的,所以标签和错误完成彼此像句子...例如,“电子邮件地址”“是必需的。”或“电子邮件地址”的格式不正确。“

感谢大家,在这里做出了贡献,

ž

+0

您可以接受您自己的答案以供将来参考。 –

0

你可以尝试removeChild之(标签),并附加一个新的给它的错误ACCUR时。切换标签似乎让SENCE

+0

感谢您的回复。我的部分问题似乎是无法将相关代码放入错误清除时触发的函数中。 – Shikarnov

1

您可以删除

errorPlacement: function(error, element) { 
     element.prev().replaceWith(error); 
    }, 

和消息应该出现在文本框旁边来代替。

+0

这里面临的挑战是我希望它完全出现在标签所在的位置 - 不在文本框的旁边或下方。 – Shikarnov