繁体   English   中英

获取动态添加输入的输入值

[英]Get input value of dynamically added input

我有几个代码块。 第一个块将用户输入添加到表单中,第二个块尝试获取该数据以评估 switch 语句。 Bc javascript 读取所有脚本一次,我在块 2 中的 var 总是返回值null 该元素在 .js 运行时没有任何价值。 如何获取在 javascript 读取所有脚本后创建的输入元素的值? 以下是重要部分的总结:

HTML:

  <div class="form-group">
     <label for="">Weight Classification:</label>
     <input type="text" class="form-control" id="weight-class" name="weight">
   </div> 

javascript:

<script>
  //prior code grabs height and weight and calcs BMI
  switch (BMI >= 16 && BMI < 43) {
    case (BMI >= 16 && BMI < 22):      
      document.getElementById("weight-class").setAttribute("value", "skinny");    
      break;

    case (BMI >= 22 && BMI < 25):
      document.getElementById("weight-class").setAttribute("value", "average");
      break;

    //other cases here...
     default:
     console.log("Error");
  } 
</script>

Javascript 块 2:

<script>
var weight = document.getElementById('weight-class').value; 

  switch (weight) {
    case (skinny):
      console.log("Successful, short");
    break;

    case (average):
      console.log("Successful, average");
    break;

    case (obese):
      console.log("Successful, tall");
    break;

    default:
      console.log("Failed all cases");
    break;
  }

</script>

您需要MutationObserver,因为您正在通过改变attribute更改输入的值,因此更改事件处理程序不会触发

 var weight = document.getElementById('weight-class'); // Create an observer instance with a callback function to execute when mutations are observed var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type == "attributes") { let weight = mutation.target.value; // get the value. switch (weight) { case ('skinny'): console.log("Successful, short"); break; case ('average'): console.log("Successful, average"); break; case ('obese'): console.log("Successful, tall"); break; default: console.log("Failed all cases"); break; } } }); }); // Start observing the target node for attribute mutations observer.observe(weight, { attributes: true //configure it to listen to attribute changes }); weight.addEventListener('change', function() { let weight = this.value; console.log('this gets fired when you change the value via input') }) //lets set the BMI var BMI = 17 + Math.random() * 7; switch (BMI >= 16 && BMI < 43) { case (BMI >= 16 && BMI < 22): document.getElementById("weight-class").setAttribute("value", "skinny"); break; case (BMI >= 22 && BMI < 25): document.getElementById("weight-class").setAttribute("value", "average"); break; //other cases here... default: console.log("Error"); console.log(BMI); }
 <div class="form-group"> <label for="">Weight Classification:</label> <input type="text" class="form-control" id="weight-class" name="weight"> </div>

document.addEventListener("change", function(){
  var weight = document.getElementById("weight-class").value; 
 
  switch (weight) {
    case "skinny":
      //do something
      break;

    case "average":
      //do something
      break;
    
    case "obese":
      //do something
    break;

    default:
    console.log("Error");
  }  
});

暂无
暂无

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

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