【发布时间】:2016-07-16 06:56:26
【问题描述】:
我有一个 javascript 函数,可以在提交之前验证弹出表单。不幸的是,它的创建是为了每页只处理一个弹出表单。
就我而言,我有两种不同的弹出表单,所以我想指定要做什么以及针对哪一个。
$.fn.goValidate = function() {
var $form = this,
$inputs = $form.find('input:text');
var validators = {
email: {
regex: /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/
}
};
var validate = function(klass, value) {
var isValid = true,
error = '';
if (!value && /required/.test(klass)) {
error = 'This field is required';
isValid = false;
} else {
klass = klass.split(/\s/);
$.each(klass, function(i, k){
if (validators[k]) {
if (value && !validators[k].regex.test(value)) {
isValid = false;
error = validators[k].error;
}
}
});
}
return {
isValid: isValid,
error: error
}
};
var showError = function($input) {
var klass = $input.attr('class'),
value = $input.val(),
test = validate(klass, value);
$input.removeClass('invalid');
$('#form-error').addClass('hide');
if (!test.isValid) {
$input.addClass('invalid');
if(typeof $input.data("shown") == "undefined" || $input.data("shown") == false){
$input.popover('show');
}
}
else {
$input.popover('hide');
}
};
$inputs.keyup(function() {
showError($(this));
});
$inputs.on('shown.bs.popover', function () {
$(this).data("shown",true);
});
$inputs.on('hidden.bs.popover', function () {
$(this).data("shown",false);
});
$form.submit(function(e) {
$inputs.each(function() {
if ($(this).is('.required') || $(this).hasClass('invalid')) {
showError($(this));
}
});
if ($form.find('input.invalid').length) {
e.preventDefault();
$('#form-error').toggleClass('hide');
}
});
return this;
};
$('form').goValidate();
我很确定这一切都与这一行有关:
$('form').goValidate();
假设第一个表单 id 是 form_1,第二个是 form_2。 我应该在这条线上放什么? 我猜是这样的:
$('form['form_1]').goValidate();
希望清楚,谢谢!
【问题讨论】:
-
然后你会写
$('#form_1').goValidate();假设form_1是第一种形式的id。 -
你摇滚!!!多么快速的反应,感谢战利品! :)
标签: javascript jquery ruby-on-rails forms