javascript - 将类添加到在单击时应用渐变的 div 仅在第一次工作

标签 javascript css html forms

我有一个表单,其中包含几个单选按钮和一个文本输入框。使用 JavaScript,我在单击时将背景渐变应用于文本字段包装器,并在单击单选按钮时将其删除。当我点击文本输入时,会应用一个通过 css 渐变的类,当我点击单选按钮时,它会被删除,但是当我重新点击文本输入时,渐变不会再次应用。为什么? 旁注,每次都会应用和删除边框......只是不是渐变。

<input type="radio" id="radio1" name="radios" >
<input type="radio" id="radio2" name="radios" >
<div id="textInputWrapper">
    <input type="text" id="textInput">
</div>
<script>
$('input[type=radio]').click(function () {
    $('#textInputWrapper').css('background', ' #17a2dc');
    $('#textInputWrapper label').css('color', 'white');
    $('#textInputWrapper').removeClass('gradient');
});
$('#textInput').click(function () {
    $('#textInputWrapper label').css('color', '#606060');
    $('#textInputWrapper').addClass('gradient');
});
</script>
<style>
.gradient {
    background: -moz-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(188,188,188,1) 52%,     rgba(126,126,126,1) 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0)), color-stop(52%,rgba(188,188,188,1)), color-stop(100%,rgba(126,126,126,1))); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(188,188,188,1) 52%,rgba(126,126,126,1) 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(188,188,188,1) 52%,rgba(126,126,126,1) 100%); /* Opera 11.10+ */
    background: -ms-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(188,188,188,1) 52%,rgba(126,126,126,1) 100%); /* IE10+ */
    background: linear-gradient(to bottom, rgba(255,255,255,0) 0%,rgba(188,188,188,1) 52%,rgba(126,126,126,1) 100%); /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#7e7e7e',GradientType=0 ); /* IE6-9 */
    border:7px white solid;
}
#textInputWrapper {
    width:100%;
}
</style>

最佳答案

这一行是你的问题:

$('#textInputWrapper').css('background', ' #17a2dc');

单击单选按钮后,此行将添加内联 CSS,这将覆盖与 .gradient 类关联的样式。而是尝试像这样修改 #textInputWrapper CSS:

#textInputWrapper:not(.gradient) {
  width:100%;
  background: #17a2dc;
}

/* Move the gradient style declaration after the #textInputWrapper declaration */
.gradient {
  background: -moz-linear-gradient(top, rgba(255,255,255,0) 0%, rgba(188,188,188,1) 52%,     rgba(126,126,126,1) 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0)), color-stop(52%,rgba(188,188,188,1)), color-stop(100%,rgba(126,126,126,1))); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(188,188,188,1) 52%,rgba(126,126,126,1) 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(188,188,188,1) 52%,rgba(126,126,126,1) 100%); /* Opera 11.10+ */
  background: -ms-linear-gradient(top, rgba(255,255,255,0) 0%,rgba(188,188,188,1) 52%,rgba(126,126,126,1) 100%); /* IE10+ */
  background: linear-gradient(to bottom, rgba(255,255,255,0) 0%,rgba(188,188,188,1) 52%,rgba(126,126,126,1) 100%); /* W3C */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#7e7e7e',GradientType=0 ); /* IE6-9 */
  border:7px white solid;
}

基本上,保持您的 CSS 隔离,以便添加和删除 .gradient 类是触发 UI 更改的唯一因素。

这是一个 jsfiddle example

关于javascript - 将类添加到在单击时应用渐变的 div 仅在第一次工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641575/

相关文章:

javascript - 动态更改表单错误的 Angular 工具提示内容

javascript - 如何设置工具提示的第一个和最后一个 child 的位置

javascript - 如何自动更改内容?

javascript - 如何等待两个异步函数结束?

php - 创建从上到下的无序列表而不是从左到右的最快方法

javascript - 在 JS 中的正方形内绘制正方形

html - 从导入的 CSS 文件继承属性

javascript - 如何捕获 Canvas 内的元素?

javascript - 我正在尝试使用 javascript onchange 方法,但我无法在文本框中获取值

javascript - angularjs 中相同文本字段的电子邮件或电话号码验证