0

我有占位符值的输入,例如:

<input type="text" name="mydate" value="yyyy-mm-dd">

如何更改我的规则以仅在值不是 "yyyy-mm-dd" 时才执行?

$(document).ready(function(){
   $("form.myclasstovalidate").validate({
       rules: {    
    mydate: {
            date: true
               }
       }
 });
4

3 回答 3

0

基本上你有一个问题,因为你的占位符文本只是输入框中的一个值,它“模仿”了占位符功能。您可能会在单击时将其删除,如果用户清空输入框的内容,则将其返回,当然进行验证调整以不将占位符验证为真实值等等......

您可以使用 html5 的占位符属性代替上述所有内容;)

于 2013-02-28T19:16:35.770 回答
0

无论出于何种原因,如果您不想使用该属性,您可以使用插件的方法placeholder创建自定义规则。即使 OP 采用了替代方法,这也是关于如何创建新规则的一个很好的教训。addMethod()

由于您声明您只希望date在值为 not 时进行验证"yyyy-mm-dd",因此我只是添加了一个条件,该条件检查输入的值与元素的defaultValue,并将默认date方法/规则代码放入其中。

jQuery.validator.addMethod("mydaterule", function (value, element) {
    if (value != element.defaultValue) {
        return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
    } else {
        return true;
    }
}, 'please enter a valid date');

您可以根据需要进一步调整它。

应用新规则如下:

$('#myform').validate({
    rules: {
        mydate: {
            mydaterule: true
        }
    }
});

演示:http: //jsfiddle.net/Acew7/

重要说明"yyyy-mm-dd"不是满足默认date规则的正确格式。但是,"yyyy/mm/dd"会工作。

例如

  • 2013-02-28date验证将失败
  • 2013/02/28 将通过date验证
于 2013-02-28T20:07:05.910 回答
0

在您的标记中使用 placeholder 属性将解决您的问题,因为它不是实际值,而是真正的占位符并且可以正常工作。顺便说一句,您的 javascript 也有语法错误。我已经在我的回答中修复了它们。

<input type="text" name="mydate" placeholder="yyyy-mm-dd" />

$(document).ready(function(){
   $("form.myclasstovalidate").validate({
       rules: {    
    mydate: {
            date: true
               }
       }
    });
 });
于 2013-02-28T19:38:39.570 回答