2012-12-06 73 views
1

我试图使用jQuery验证插件来验证窗体,但我需要完全删除它使用名称属性的能力。我的表单的一部分是基于递增的计数器动态创建的,我只想仅使用类。删除基于名称的jQuery验证

有没有办法做到这一点?

我已经实现了addClassRules方法并为每个字段添加了所有类,但是如果从字段中删除类,它仍然会根据名称字段进行验证。

这真的开始令人沮丧。

jQuery.validator.addClassRules({ 
    username: { 
     required: true, 
     minlength: 2, 
     remote: "whatever.php" 
    } 
}); 

<div class="control-group"> 
    <label class="control-label" for="username"> 
     <?php echo $entry_username; ?> 
    </label> 
    <div class="controls"> 
     <input type="text" class="input-large" 
       name="username" id="username" 
       value="<?php echo $username; ?>" required> 
    </div> 
</div> 

正如你可以看到这个元素没有一个类名的,但验证回落到使用name属性如果该类不存在。

我想只使用类来验证。

谢谢。

+2

代码的片段放这里。 – Habibillah

+0

其他人看到他们无法理解的问题更令人沮丧。所以,是的,请添加一些代码段/小提琴也许可以解决你的问题。 – BuddhiP

+0

不知道为什么这个问题需要代码...我没有要求调试代码,我问如何关闭名称属性后备,但...代码添加无论如何。 –

回答

4

使用内置的rules()方法添加规则并将其分配classSee documentation.

注:必须调用此方法后打电话.validate()

我有一个非常大的窗体,用户可以动态添加字段。这是我用来确保我新创建的字段也是验证的一部分的确切方法。

(如果从input删除class,它将(不能)在name属性,因为name属性不是.validate()选项或规则中的任何地方使用的验证。)

HTML:

<form id="form"> 
    <input type="text" class="myclass" name="whatever" /> 
</form> 

的jQuery:

$("#form").validate({ 
    // my options 
}); 

// the following method must come AFTER .validate() 
$('#form').find('.myclass').each(function() { 
    $(this).rules('add', { 
     required: true, 
     minlength: 5, 
     messages: { 
      required: "Required input", 
      minlength: jQuery.format("At least {0} characters are necessary") 
     } 
    }); 
}); 

jsFiddle DEMO

+0

bazinga ..这救了我像2天的头痛。怪胎asp.net和他们改变的名称属性。我想出了一个解决方案,使用jquery更改名称属性,但后来我打破了viewstate。这工作完美。我之前看到过这样的内容,但并没有意识到你也可以附加信息。 – KingOfHypocrites

-1

如果您仅使用特定的类名进行验证,该怎么办?有什么不同于name

例如:validatable-username(并不一定是长期的,但你让我的想法)

那么就不能回退到名字。