未捕获的ReferenceError:函数未定义。 HTMLButtonElement.onclick与Rails6中的Webpack

我试图找到一种解决方案,但是我不能这样做。所以我需要帮助。 我使用Railpack 6,使用Webpack 我有main.JS代码的一部分:

 window.onload = function() {

some code 
 };

/**
 * Restart the calibration process by clearing the local storage and reseting the calibration point
 */
function Restart(){
    document.getElementById("accuracy").innerHTML = "<a>Not yet Calibrated</a>";
    ClearCalibration();
    PopUpInstruction();
}
// document.getElementById("Restbutt").addEventListener("click",Restart,false);

和一部分Calibration.js代码

    */
 function PopUpInstruction(){
  ClearCanvas();
  swal({
    title:"Calibration",text: "Please click on each of the 9 points on the screen. You must click on each point 5 times till it goes yellow. This will calibrate your eye movements.",buttons:{
      cancel: false,confirm: true
    }
  }).then(isConfirm => {
    ShowCalibrationPoint();
  });

}
/**
  * some code
  */

function ClearCalibration(){
  window.localStorage.clear();
  $(".Calibration").css('background-color','red');
  $(".Calibration").css('opacity',0.2);
  $(".Calibration").prop('disabled',false);

  CalibrationPoints = {};
  PointCalibrate = 0;
}

// sleep function because java doesn't have one,sourced from http://stackoverflow.com/questions/951021/what-is-the-javascript-version-of-sleep
function sleep (time) {
  return new Promise((resolve) => setTimeout(resolve,time));
}

StartPack包含

require("../components/main");
require("../components/calibration");

和我的html5的一部分:

<%= javascript_pack_tag 'StartPack','data-turbolinks-track': 'reload' %>

<!-- some code -->
<!-- Modal -->
<div id="helpModal" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-body">
        <img src="<%= asset_pack_path 'media/images/calibration.png' %>" width="100%" height="100%" alt="webgazer demo instructions"></img>
      </div>
      <div class="modal-footer">
        <button id="closeBtn" type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary" data-dismiss="modal" onclick="Restart()">Calibrate</button>
        <!--        <button type="button" class="btn btn-primary" data-dismiss="modal" id="Restbutt">Calibrate</button>-->
      </div>
    </div>
  </div>
</div>
<!-- Latest compiled JavaScript -->
<%= javascript_pack_tag 'LatestCompiledJS','data-turbolinks-track': 'reload' %>

我尝试执行的操作以及收到的错误消息 1)我尝试将main.js脚本替换为html的末尾,因此错误是未定义ClearCalibration 2)将HTML字符串中的onclick=Restart()重写为<button type="button" class="btn btn-primary" data-dismiss="modal" id="Restbutt">Calibrate</button> 在像这样调用main.js之后

function Restart(){
document.getElementById("accuracy").innerHTML = "<a>Not yet Calibrated</a>";
ClearCalibration();
PopUpInstruction();
};
document.getElementById("Restbutt").addEventListener("click",false);

我收到的错误是“无法读取null的属性'addEventListener'”

你能帮我吗?

liyaozong 回答:未捕获的ReferenceError:函数未定义。 HTMLButtonElement.onclick与Rails6中的Webpack

document.addEventListener('click',function(ev) {if(ev.target.id == 'Restbutt')Restart()})

或(jQuery方法)

$(document).on('click','#Restbutt',Restart);
,

正如Alex V.所说,启动重新启动功能存在问题,可以通过document.addEventListener('click',function(ev) {if(ev.target.id == 'Restbutt')Restart()}) 来解决,但还有另一个问题。对于浏览器,“重新启动”中的函数(calibration.js中的函数)“未定义”。因此,解决此问题的方法是从

重新定义函数
    function PopUpInstruction(){
  ClearCanvas();
  swal({
    title:"Calibration",text: "Please click on each of the 9 points on the screen. You must click on each point 5 times till it goes yellow. This will calibrate your eye movements.",buttons:{
      cancel: false,confirm: true
    }
  }).then(isConfirm => {
    ShowCalibrationPoint();
  });

}
/**
  * some code
  */

function ClearCalibration(){
  window.localStorage.clear();
  $(".Calibration").css('background-color','red');
  $(".Calibration").css('opacity',0.2);
  $(".Calibration").prop('disabled',false);

  CalibrationPoints = {};
  PointCalibrate = 0;

对此(正在工作的警告)

  PopUpInstruction = function(){
  ClearCanvas();
  swal({
    title:"Calibration",confirm: true
    }
  }).then(isConfirm => {
    ShowCalibrationPoint();
  });

}
/**
  * some code
  */

  ClearCalibration = function(){
  window.localStorage.clear();
  $(".Calibration").css('background-color',false);

  CalibrationPoints = {};
  PointCalibrate = 0;
  }
本文链接:https://www.f2er.com/3097637.html

大家都在问