单击javascript时颜色未正确更改

时间:2019-10-11 20:11:49

标签: javascript jquery html css

我有这个下拉列表,其中有两个选项,蓝色和绿色。如果选择蓝色,则每当单击文本输入字段时,其背景就会在蓝色和黑色(即文本字段背景颜色)之间切换。红色选项也是如此。但是,我只在第一次和第二次工作过的代码。从第三次开始,即使我选择红色,它也会在蓝色和另一种颜色之间切换。 这是我的HTML:

有人知道错在哪里吗?我在想也许我不完全了解jquery的change函数如何工作。

$('#change_color').on('change', function() {
  //get the text value of the option chosen

  var colorOption = $("#change_color option:selected").text();

  //if option chosen is red then allow change input box to red
  if (colorOption === 'Red') {
    $('.my-input').click(function(inputBox) {
      $(inputBox.target).toggleClass('red');
    });
  }

  //if option is chosen is red then allow change input box to blue
  else {
    $('.my-input').click(function(inputBox) {
      $(inputBox.target).toggleClass('blue');
    });
  }
});
.my-input {
  background-color: black;
  width: 5%;
  font-size: 3vw;
}

.red {
  background-color: red;
  width: 5%;
  font-size: 3vw;
}

.blue {
  background-color: blue;
  width: 5%;
  font-size: 3vw;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="change_color" class="form-control box-border" placeholder="SPECIAL CHAR">
  <option selected disabled>Special Char</option>
  <option>Red</option>
  <option>Blue</option>
</select>
<input type="text" class="my-input">
<input type="text" class="my-input">
<input type="text" class="my-input">

2 个答案:

答案 0 :(得分:0)

Jsfiddle

找到上面的jsfiddle。

您只能使用$('.my-input')来调用click事件,删除所有类,然后进行检查以查看选择的colorOption

//if option chosen is red then allow change input box to red
$('.my-input').click(function(inputBox) {
  colorOption = $("#change_color option:selected").text();
  $(this).removeClass();
  colorOption === 'Red' ? $(inputBox.target).addClass('red') : $(inputBox.target).addClass('blue');
});
.my-input {
  background-color: black;
  width: 5%;
  font-size: 3vw;
}

.red {
  background-color: red;
  width: 5%;
  font-size: 3vw;
}

.blue {
  background-color: blue;
  width: 5%;
  font-size: 3vw;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="change_color" class="form-control box-border" placeholder="SPECIAL CHAR">
  <option selected disabled>Special Char</option>
  <option>Red</option>
  <option>Blue</option>
</select>
<input type="text" class="my-input">
<input type="text" class="my-input">
<input type="text" class="my-input">

答案 1 :(得分:0)

执行$(element).click(...)时,您正在将新的侦听器附加到该元素。如果您重复执行此操作,这些监听器将堆叠。在您的示例中,每次更改下拉菜单时,您都添加了一个新事件-替换上一个事件。

相反,最简单的方法可能是这样的:

  • 具有存储颜色的全局变量

  • 在下拉菜单中添加更改事件。更改后,将全局颜色变量设置为所选选项

  • 将click事件附加到输入中。单击后,将背景设置为全局颜色变量

看起来像这样:

let backgroundColor;                                //Global var to hold color choice

$("#change_color").on("change", function() {        //When <select> changes
  backgroundColor = $(this).val();                  //Update global var
}).change();                                        //Fire this event on page-load

$(".my-input").on("click", function() {             //When input is clicked
  $(this).toggleClass(backgroundColor);             //Toggle class
});
.my-input { background-color: black; }
.blue { background-color: blue; }
.red { background-color: red; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="change_color">
  <option>blue</option>
  <option>red</option>
</select>

<input class="my-input" />
<input class="my-input" />
<input class="my-input" />