代码之家  ›  专栏  ›  技术社区  ›  abbas_arezoo

使用vanilla JS重新计算更改事件中的数字

  •  0
  • abbas_arezoo  · 技术社区  · 6 年前

    <select> 菜单选择初始数字和 <input type="number"> 对于乘数。

    <选择> 价值?表单当前工作,但用户需要在重新选择初始数字后删除乘数。

    我现在在这里:

    const selectValIn = document.querySelector(".select-val-in");
    const inputValIn = document.querySelector(".input-val-in");
    const valOut = document.querySelector(".val-out");
    let multiplier = 2;
    
    selectValIn.addEventListener("change", switchValIn);
    inputValIn.addEventListener("keyup", convert);
    
    function switchValIn() {
      let selectedVal = selectValIn.value;
    
      if (selectedVal === "four") {
      multiplier = 4;
      } else if (selectedVal === "six") {
      multiplier = 6;
      } else if (selectedVal === "eight") {
      multiplier = 8;
      }
    }
    
    function convert(e) {
      const inputValIn = e.target.value;
      const multiplication = inputValIn * multiplier;
    
      valOut.innerText = multiplication;
    }
    <div class="converter">
      <div class="converter-row">
        <select class="select-val-in">
        <option value="two">2</option>
        <option value="four">4</option>
        <option value="six">6</option>
        <option value="eight">8</option>
      </select>
      </div>
      <div class="converter-row">
      <label>Multiplied by:</label>
      <input class="input-val-in" type="number" value="0" />
      </div>
      <div class="converter-row">
      <p>Equals: <span class="val-out">0</span></p>
      </div>
    </div>

    https://codepen.io/abbasarezoo/pen/59776227c017d1c1a3a245a37c305e76

    3 回复  |  直到 6 年前
        1
  •  2
  •   SuperDJ Franklin Rivero    6 年前

    看看下面的例子。还可以看看 following 看看他们之间的区别 change input .

    const selectValIn = document.querySelector(".select-val-in");
    const inputValIn = document.querySelector(".input-val-in");
    const valOut = document.querySelector(".val-out");
    
    selectValIn.addEventListener("input", calculate);
    inputValIn.addEventListener("input", calculate);
    
    function calculate()
    {
      valOut.innerText = Number(inputValIn.value) * Number(selectValIn.value);
    }
    <div class="converter">
      <div class="converter-row">
        <select class="select-val-in">
          <option value="2">2</option>
          <option value="4">4</option>
          <option value="6">6</option>
          <option value="8">8</option>
        </select>
      </div>
      
      <div class="converter-row">
        <label>Multiplied by:</label>
        <input class="input-val-in" type="number" value="0" />
      </div>
      
      <div class="converter-row">
        <p>Equals: <span class="val-out">0</span></p>
      </div>
    </div>

    另请注意,开关可能更易于阅读:

    // Easier to read
    switch(selectedVal)
    {
     case 'two':
      multiplier = 2;
      break;
    case 'four':
      multiplier = 4;
      break;
    case 'six':
      multiplier = 6;
      break;
    case 'eigth':
      multiplier = 8;
      break;
    }
    
        2
  •  2
  •   nanobar    6 年前

    // Selectors
    
    const selectValIn = document.querySelector(".select-val-in");
    const inputValIn = document.querySelector(".input-val-in");
    const valOut = document.querySelector(".val-out");
    
    // Calculate
    
    function calculate() {
    	const value = Number(inputValIn.value);
    	const multiplier = Number(selectValIn.value);
    	valOut.innerText = value * multiplier;
    }
    
    // Event listeners
    
    selectValIn.addEventListener("change", calculate);
    inputValIn.addEventListener("input", calculate);
    * {
    	box-sizing: border-box;
    	margin: 0;
    	padding: 0;
    }
    
    .converter-row {
    	margin: 0 0 1rem;
    }
    <div class="converter">
    	<div class="converter-row">
    		<select class="select-val-in">
    			<option value="2" selected>2</option>
    			<option value="4">4</option>
    			<option value="6">6</option>
    			<option value="8">8</option>
    		</select>
    	</div>
    	<div class="converter-row">
    		<label>Multiplied by:</label>
    		<input class="input-val-in" type="number" value="0" />
    	</div>
    	<div class="converter-row">
    		<p>Equals: <span class="val-out">0</span></p>
    	</div>
    </div>
        3
  •  0
  •   Damanveer Singh    6 年前

    你试过存储你的输入值和乘数吗?这样,您只需在switchValIn函数内部进行检查,以查看inputValIn是否已经存在,在这种情况下,您只需执行乘法并立即渲染即可。

    另一种方法是设置一个默认的inputValue,这样您就不必进行检查,而是在每次更改时运行乘法

    推荐文章