Jquery 将文本框设置回默认样式
我有一些jQuery,它在表单输入元素上循环,如果它发现它们是空的,它会将它们的Jquery 将文本框设置回默认样式,jquery,html,css,Jquery,Html,Css,我有一些jQuery,它在表单输入元素上循环,如果它发现它们是空的,它会将它们的边框颜色设置为红色。单击submit按钮时,它会再次检查元素,如果有包含数据的元素,那么我会尝试将文本框设置回其原始样式 我尝试过使用边框样式:solid/none/initial和边框颜色:black,但该框要么看起来非常粗体,要么根本没有边框。代码如下: function validateForm() { isValid = true; $('input[type="text"]'
边框颜色设置为红色。单击submit按钮时,它会再次检查元素,如果有包含数据的元素,那么我会尝试将文本框设置回其原始样式
我尝试过使用边框样式:solid/none/initial
和边框颜色:black
,但该框要么看起来非常粗体,要么根本没有边框。代码如下:
function validateForm() {
isValid = true;
$('input[type="text"]').each(function () {
if ($(this).val() === "") {
$(this).css('border-color', 'red');
isValid = false;
alert('Please fill a value in for : ' + $(this).attr('name'));
}
else {
$(this).css('border-color', 'black');
$(this).css('border-style', 'solid');
}
});
if (isValid) {
$('#contactForm').submit();
}
}
使用类可能会有所帮助,也可能会减少逻辑:
function validateForm() {
var formValid = true;
$('input[type="text"]').each(function(){
var $this = $(this);
if ($this.val() === "") {
$this.addClass('errorClass');
formValid = false;
} else {
$this.removeClass('errorClass');
}
});
if (formValid) {
$('#contactForm').submit();
} else {
alert('Missing required fields. Please review and try again.');
}
}
“errorClass”在哪里
errorClass { border-color: #F00; }
使用类可能会有所帮助,也可能会减少逻辑:
function validateForm() {
var formValid = true;
$('input[type="text"]').each(function(){
var $this = $(this);
if ($this.val() === "") {
$this.addClass('errorClass');
formValid = false;
} else {
$this.removeClass('errorClass');
}
});
if (formValid) {
$('#contactForm').submit();
} else {
alert('Missing required fields. Please review and try again.');
}
}
“errorClass”在哪里
errorClass { border-color: #F00; }
不要直接使用$(this.css('border-color','red')
)设置边框颜色,而是创建一个样式为边框颜色:red
的类,并使用$(this.addClass(className)
和$(this.removeClass(className)
添加和删除样式
function validateForm() {
isValid = true;
$('input[type="text"]').each(function () {
if ($(this).val() === "") {
$(this).addClass('redBorderClass');
isValid = false;
alert('Please fill a value in for : ' + $(this).attr('name'));
}
else {
$(this).removeClass('redBorderClass');
}
});
if (isValid) {
$('#contactForm').submit();
}
}
不要直接使用$(this.css('border-color','red')
)设置边框颜色,而是创建一个样式为边框颜色:red
的类,并使用$(this.addClass(className)
和$(this.removeClass(className)
添加和删除样式
function validateForm() {
isValid = true;
$('input[type="text"]').each(function () {
if ($(this).val() === "") {
$(this).addClass('redBorderClass');
isValid = false;
alert('Please fill a value in for : ' + $(this).attr('name'));
}
else {
$(this).removeClass('redBorderClass');
}
});
if (isValid) {
$('#contactForm').submit();
}
}
如果您正在使用样式表,这将用于重置输入:
$(input).attr('style', '')
如果您正在使用样式表,这将用于重置输入:
$(input).attr('style', '')
如果您使用样式表只需执行$(input).attr('style','')这将清除输入本身的所有样式(基本上将其重置为样式表定义的样式)@Camway-将其作为答案发布。@Taplar-将其作为答案发布。作为旁注,您应该添加一个新变量,var$this=$(this)每个(
回调并更改对$(this)
的所有引用以使用该变量。例如,添加变量后,您将$(this.val()…
更改为$this.val()…
。我们这样做是因为$(…)
实际上是一个函数调用,可以被看作是一个构造函数,每次都创建一个新的jQuery对象
每次,我们都将其存储在一个变量中,$this
,以供重用。这在某些情况下可以显著提高性能。看看@Taplar的解决方案,它使用了$this
。这是迄今为止最干净、最有效的解决方案。如果您使用样式表只需执行$(input.attr('style','')这将清除输入本身的所有样式(基本上将其重置为样式表定义的样式)@Camway-将其作为答案发布。@Taplar-将其作为答案发布。作为旁注,您应该在中添加一个新变量,var$this=$(this);
。每个(
回调并将所有引用更改为$(this)
使用该变量。例如,添加变量后,您将$(this.val()…
更改为$this.val()…
。我们这样做是因为$(…)
实际上是一个函数调用,可以被认为是一个构造函数,每次都创建一个新的jQuery对象。而不是重新创建$(此)
每次,我们都将其存储在一个变量中,$this
,以供重用。在某些情况下,这可以显著提高性能。看看@Taplar的解决方案,它使用了$this
。His是迄今为止最干净、最有效的解决方案。虽然您的解决方案稍微精简了一些,但实际上运行速度比原始的慢(function(){…if…else…
implementation。原始运行时间为O(n)
time(在集合中循环一次),而您的运行时间为O(3n)
time(当它在集合中循环三次时,每次输入一次。一旦这项内容被更改回来,我将进行升级投票。现在升级投票,假设您将删除另一个。filter
调用您真的觉得有限集上的筛选器对性能有很大影响吗?不,但它对性能的影响大于包含的OP,这使得它不是最佳解决方案。)在我写完我的建议评论之前,$this
的使用也非常棒!虽然更加精简,但您的解决方案实际上比原始的运行得慢。每个(函数(){…如果…否则…
实现。原始的运行时间为O(n)
时间(当它在集合中循环一次)而您的运行时间是O(3n)
time(当它在集合中循环三次时,每次输入一次。一旦这项内容被更改回来,我将进行升级投票。现在升级投票,假设您将删除另一个。filter
调用您真的觉得有限集上的筛选器对性能有很大影响吗?不,但它对性能的影响大于包含的OP,这使得它不是最佳解决方案。)在我写完我的建议评论之前,$this
的使用真是太棒了!