Javascript removeEventListener-返回False不停止侦听器

Javascript removeEventListener-返回False不停止侦听器,javascript,addeventlistener,removeeventlistener,Javascript,Addeventlistener,Removeeventlistener,我正在收听两个变量的变化身高和体重。当这两个值都计算为true时,我希望返回值false来停止侦听器。当我在代码的其他地方移动范围滑块时,它会不断追加 function makeModeler() { document.addEventListener("change", function(){ var height = document.getElementById('height-class').value; var weight =

我正在收听两个变量的变化
身高
体重
。当这两个值都计算为true时,我希望返回值
false
来停止侦听器。当我在代码的其他地方移动范围滑块时,它会不断追加

  function makeModeler() {
    document.addEventListener("change", function(){
      var height = document.getElementById('height-class').value; 
      var weight = document.getElementById('weight-class').value;
      shape = height + "_" + weight;
     
      if (!(height && weight)) { 
        return true;

      } else {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "js/modelers/"+shape+".js";

        document.body.appendChild(script);
        return false;        
      }
    });  
   
  }

  makeModeler();

  document.addEventListener("change", makeModeler);
  document.removeEventListener("change", makeModeler, false);

您正在每次更改中无限添加事件,因为您正在执行以下操作:

document.addEventListener("change", makeModeler);

而且
makeModeler
函数最初还添加了
onChange
event

我必须找到一种非常规的方法来停止eventListener。在我的站点上呈现数据的“动态”方式对我不起作用。需要注意的是,
addEventListener
应该附带一个选项来阻止它无限运行。看起来很明显

我将侦听器添加到do/while:

  var height = document.getElementById('height-class').value; 
  var weight = document.getElementById('weight-class').value;
  
  do {
    document.addEventListener("change", function(){
      
      var height = document.getElementById('height-class').value; 
      var weight = document.getElementById('weight-class').value;

      shape = height + "_" + weight;
     
      if (!(height && weight)) { 
        return true;      

      } else {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "js/modelers/"+shape+".js";

        document.body.appendChild(script);
        document.getElementById('weight-class').id = "weight-class2";
        
      }
      
    });  
  }
  while (height && weight);

我更改了元素的id以停止while条件从求值变为true。经验更丰富的程序员可能知道更好的方法来停止这种情况。

我删除了addListener,它仍然无限运行。我不知道你说makeModeler函数首先添加onChange是什么意思。