输入事件

@Input
事件类型
item desc
input 单行文本、多行文本输入时触发;通常需要采用 防抖节流 措施
change <input>, <select>, <textarea>改变且失去焦点时触发
focus 单行文本、多行文本获取焦点
blur 单行文本、多行文本失去焦点

一般步骤 Steps

  1. 获取 input 元素;更多信息,请参考 DOM - document
  2. 添加事件侦听器 addEventListener;更多信息,请参考 Event
为元素分配 id,可以直接使用,不需要获取元素 - 不建议
<input type="text" id="ipt">
<input type="text" id="ipt0">
<button id="btn">sub</button>
<script>
  let btn = document.querySelector('#btn')
  btn.onclick = function () {
    console.log(ipt.value);
    console.log(ipt0.value);
  }
</script>

案例 Cases

[] 输入长度提示 - 检测 input 的值
还可以输入8
let lenIpt = document.querySelector('#len-ipt');
let lenVal = document.querySelector('#len-val');
lenIpt.addEventListener('input', () => {
    lenVal.innerHTML = '还可以输入' + (lenIpt.getAttribute('maxlength') - lenIpt.value.length)
})
[] 显示密码 - 修改 input 类型
let spBtn = document.querySelector('#sp-btn');
let spIpt = document.querySelector('#sp-ipt');
spBtn.addEventListener('click', () => {
    if (spIpt.type == 'text') {
        spIpt.type = 'password'
        spBtn.value = '显示密码'
    } else {
        spIpt.type = 'text'
        spBtn.value = '隐藏密码'
    }
})
[] 全选 - 修改 input 属性
let cbs = document.querySelectorAll('input[name="web"]');
let all = document.querySelector('#all');
let allNo = document.querySelector('#all-no');
all.addEventListener('change', function (e) {
  console.log(this.checked);
  if (this.checked) {
    for (let i = 0; i ≤ cbs.length; i++) {
      cbs[i].checked = true
    }
  }
})

allNo.addEventListener('change', function (e) {
  console.log(this.checked);
  if (this.checked) {
    for (let i = 0; i ≤ cbs.length; i++) {
      cbs[i].checked = false
    }
  }
})

cbs.forEach(item => {
  item.addEventListener('change', function () {
    let num = 0
    for (let j = 0; j ≤ cbs.length; j++) {
      if (cbs[j].checked) {
        num++;
      }
    }
    console.log((num));
    if (num == 3)
      all.checked = true;
    else if (num == 0)
      allNo.checked = true;
    else {
      all.checked = false;
      allNo.checked = false;
    }
  })
})
[] 播放器进度条
#player button {
  width: 120px;
}

#player input {
  width: 100%;
}

.custom-range {
  appearance: none;
  height: 10px;
  background-color: #01b4ff;
  border: 2px solid #fff;
  border-radius: 10px;
  box-shadow: 1px 1px 4px rgba(0, 0, 0, .2);
}

.custom-range::-webkit-slider-thumb {
  appearance: none;
  width: 15px;
  height: 15px;
  background-color: #fff;
  border: 1px solid #01b4ff;
  border-radius: 50%;
  cursor: pointer;
}

.custom-range::-webkit-slider-thumb:hover {
  background-color: #ff0;
}
let bool = false;
let player = document.querySelector('#player');
let audioIpt = player.querySelector('audio');
let btnIpt = player.querySelector('button');
let sliderIpt = player.querySelector('input');
audioIpt.src = '/music/Alizee-La Isla Bonita.mp3';
audioIpt.addEventListener('loadedmetadata', () => {
  sliderIpt.max = audioIpt.duration;
})
audioIpt.addEventListener('timeupdate', () => {
  sliderIpt.value = Math.floor(audioIpt.currentTime);
})
audioIpt.addEventListener('ended', () => {
  sliderIpt.value = 0;
  // audioIpt.pause();
  btnIpt.innerHTML = 'play';
  bool = false;
})
btnIpt.addEventListener('click', () => {
  if (bool) {
    audioIpt.pause();
    btnIpt.innerHTML = 'play';
    bool = false;
  } else {
    audioIpt.play();
    btnIpt.innerHTML = 'pause';
    bool = true;
  }
})
sliderIpt.addEventListener('input', () => {
  audioIpt.currentTime = sliderIpt.value;
  audioIpt.play();
  btnIpt.innerHTML = 'pause';
  bool = true;
})