简体   繁体   English

在值上插入值时如何切换输入元素的类

[英]How to toggle a class of an input element when a value is inserted on that element

I am having a javascript handler on an input html element. 我在输入html元素上有一个javascript处理程序。 The input html elements may be many.. The point is whenever I insert a value on the input html element I would like to add a class on that element in order to change the background-color of the input that has a value. 输入html元素可能很多。.重点是,每当我在输入html元素上插入值时,我都想在该元素上添加一个类,以更改具有值的输入的背景色。 Right now I am doing: **$('this.seat_box').toggleClass('selected');******** but this will affect all the elements that has the class. 现在我正在做:** $('this.seat_box')。toggleClass('selected'); ********但这会影响所有具有该类的元素。 Is there a way to pass an argument on the handler function in the input element refering somehow to this? 是否可以通过某种方式在输入元素中的处理函数上传递参数? I have tried to pass the arguments or argument like: onchange="bc.seatBoxHandleEvent('input', this) and none of these worked... 我试图传递像这样的参数或参数:onchange =“ bc.seatBoxHandleEvent('input',this),但这些都不起作用...

Any help appreciated.! 任何帮助表示赞赏。

The Html code: HTML程式码:

<div class="bus-builder-seat-box-container" id="dynamic-bus-builder-1">
  <input id="posA100" type="text" class="seat_box" onchange="bc.seatBoxHandleEvent()">
  <input id="posA101" type="text" class="seat_box" onchange="bc.seatBoxHandleEvent()">
</div>

I have the following code for javascript validation: 我有以下用于JavaScript验证的代码:

bc.seatBoxHandleEvent = function () {
  bc.checkInput();
  var seatNumberFirstFloor = $('#dynamic-bus-builder-1');
  if (seatNumberFirstFloor && seatNumberFirstFloor.valueOf()) {
    var leftStreaming = (event.target.id);
    var rightStreaming = 'posB1' + leftStreaming.substring(5, 7);
    document.getElementById(rightStreaming).innerHTML = event.target.value;
  }
}

bc.checkInput = function () {
  var targetValue = event.target.value;
  var id = event.target.id;
  var classOfInput = event.target.classList;
  if (targetValue !== 8 && targetValue !== 0 && (targetValue < 48 || targetValue > 57)) {
    console.log('valid number');
    console.log(classOfInput);
    **$('this.seat_box').toggleClass('selected');********
  }
  else {
    console.log('invalid character');
  }
}

Pass the element to the function from HTML. 通过HTML将元素传递给函数。

 bc = []; bc.seatBoxHandleEvent = function (el) { bc.checkInput(el); var seatNumberFirstFloor = $('#dynamic-bus-builder-1'); if (seatNumberFirstFloor && seatNumberFirstFloor.valueOf()) { var leftStreaming = (event.target.id); var rightStreaming = 'posB1' + leftStreaming.substring(5, 7); } } bc.checkInput = function (el) { var targetValue = event.target.value; var id = event.target.id; var classOfInput = event.target.classList; if (targetValue !== 8 && targetValue !== 0 && (targetValue < 48 || targetValue > 57)) { console.log('valid number'); console.log(classOfInput); $(el).toggleClass('selected'); } else { console.log('invalid character'); } } 
 div.class1 { border: 1px solid #000; padding: 10px; background-color: #FFCC00; } .selected { background-color: red; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> <div class="bus-builder-seat-box-container" id="dynamic-bus-builder-1"> <input id="posA100" type="text" class="seat_box" onchange="bc.seatBoxHandleEvent(this)"> <input id="posA101" type="text" class="seat_box" onchange="bc.seatBoxHandleEvent(this)"> </div> 

I did just rewrote bc to an object instead, the syntax is apart from that the same. 我只是将bc重写为一个对象,语法与此不同。 But this one works. 但这是可行的。 Remember that the onchange event is only trigger on blur. 请记住,onchange事件仅在模糊时触发。 So if you want the event to trigger when entering a value then use onkeypress event instead. 因此,如果您希望事件在输入值时触发,请改用onkeypress事件。

JS JS

var BC = function () {
  this.seatBoxHandleEvent = function () {

    var checkInput = function () {

      var targetValue = event.target.value;
      var id = '#' + event.target.id;

      if (targetValue !== 8 && targetValue !== 0 && (targetValue < 48 || targetValue > 57)) {
        console.log('valid number');
        console.log(event.target.classList); // [seat-box] set on the event.target
        $(id).toggleClass('selected');
        console.log(event.target.classList); // [seat-box, selected] set on the event.target
      }
      else {
        console.log('invalid character');
      }
    };

    checkInput();
  };
};

this.bc = new BC();

HTML HTML

<div class="bus-builder-seat-box-container" id="dynamic-bus-builder-1">
  <input id="posA100" type="text" class="seat_box" onchange="bc.seatBoxHandleEvent()">
  <input id="posA101" type="text" class="seat_box" onchange="bc.seatBoxHandleEvent()">
</div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM