我使用this plugin来验证表单。
在我的表单上,我输入了密码并显示了密码'复选框。 当用户点击显示密码时,输入会从密码类型更改为文本。
$('#show_password').off();
$('#show_password').on('click', function() {
var change = '';
var $input = $('#cpassword');
if ($(this).is(':checked')) {
change = 'text';
} else {
change = 'password';
}
var rep = $('<input type="' + change + '" />')
.attr('id', $input.attr('id'))
.attr('name', $input.attr('name'))
.attr('class', $input.attr('class'))
.val($input.val())
.insertBefore($input);
$input.remove();
$input = rep;
$('#frm_user_details').formValidation('revalidateField', 'password');
});
基本上输入类型已更改(但保持相同的名称),我需要重新验证字段,但它不起作用。
答案 0 :(得分:1)
一个问题可能是因为您正在克隆密码字段的所有属性,即使id
也是如此。根据w3标准,您不应该有两个具有相同ID属性的元素。
所以你可以尝试下面的代码:
$('#show_password').off();
$('#show_password').on('click', function() {
var change = '';
var $input = $('#cpassword');
if ($(this).is(':checked')) {
change = 'text';
} else {
change = 'password';
}
var rep = $('<input type="' + change + '" />')
.attr('id', $input.attr('id')+'_text')
.attr('name', $input.attr('name'))
.attr('class', $input.attr('class'))
.val($input.val())
.insertBefore($input);
$input.remove();
$input = rep;
$('#frm_user_details').formValidation('revalidateField', 'password');
});
答案 1 :(得分:1)
使用复杂表单时,可能会动态地将字段添加到表单中(或从表单中删除)。新添加的字段也需要进行验证。
因此,在删除字段并创建新字段后,您必须使用addField
方法将其添加到$('#show_password').off();
$('#show_password').on('click', function () {
var change = '';
var $input = $('#cpassword');
if ($(this).is(':checked')) {
change = 'text';
} else {
change = 'password';
}
var rep = $('<input type="' + change + '" />')
.attr('id', $input.attr('id'))
.attr('name', $input.attr('name'))
.attr('class', $input.attr('class'))
.val($input.val())
.insertBefore($input);
$input.remove();
$input = rep;
// Add the new field to the plugin
// For the second param, you can either use the field object or its name.
// See
// http://formvalidation.io/api#add-field
$('#frm_user_details').formValidation('addField', $input);
// Finaly revalidate it
$('#frm_user_details').formValidation('revalidateField', 'password');
});
。
请参阅以下代码:
{{1}}