javascript - 更改事件后未调用函数

标签 javascript html

我是 JavaScript 新手。函数changeStuff仅执行一次(在文档准备好之后),但其他onchange事件不起作用。我想根据选择输入中的值来改变显示或隐藏哪些元素。这是代码。

function changeStuff() {
  if (document.getElementById('editLocation').value == 'Resident') {
    document.getElementById('editResidentZoneDiv').style.display = 'block';
    document.getElementById('editNonResidentZoneDiv').style.display = 'none';
    document.getElementById('editKmZoneDiv').style.display = 'none';
    document.getElementById('editNonResidentZone').removeAttribute('required');
    document.getElementById('editKmZone').removeAttribute('required');
  } else if (document.getElementById('editLocation').value == 'Non-Resident') {
    document.getElementById('editResidentZoneDiv').style.display = 'none';
    document.getElementById('editNonResidentZoneDiv').style.display = 'block';
    document.getElementById('editKmZoneDiv').style.display = 'none';
    document.getElementById('editResidentZone').removeAttribute('required');
  } else {
    document.getElementById('editResidentZoneDiv').style.display = 'none';
    document.getElementById('editNonResidentZoneDiv').style.display = 'none';
    document.getElementById('editKmZoneDiv').style.display = 'none';
  }
if (document.getElementById('editNonResidentZone').value == 'KM') {
document.getElementById('editKmZoneDiv').style.display = 'block';
} else {
	document.getElementById('editKmZoneDiv').style.display = 'none';
}
}

if (document.readyState == 'complete') {
	document.body.addEventListener('load', changeStuff())
}


document.getElementById('editLocation').addEventListener('change', changeStuff())
document.getElementById('editResidentZone').addEventListener('change', changeStuff())
document.getElementById('editNonResidentZone').addEventListener('change', changeStuff())
document.getElementById('editKmZone').addEventListener('change', changeStuff())
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title></title>
  <link rel="stylesheet" href="">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
</head>

<body>
  <div class="container">
    <div class="jumbotron mx-auto">
      <div>
        <!-- Display student name here -->
        John Doe
<hr>
      </div>
      <form action="" method="" id="updateData">
        <div class="form-group" id="editLocationDiv">
          <label for="editLocation">Edit Location</label>
          <select class="form-control" name="editLocation" id="editLocation" required>
            <option>Select</option>
            <option>Non-resident</option>
            <option>Resident</option>
          </select>
        </div>
        <div class="form-group" id="editResidentZoneDiv">
          <label for="editResidentZone">Resident Zone</label>
          <select class="form-control" name="editResidentZone" id="editResidentZone" required>
            <option>Select</option>
            <option>Nyayo</option>
            <option>Eastern</option>
            <option>Western</option>
          </select>
        </div>
        <div class="form-group" id="editNonResidentZoneDiv">
          <label for="editNonResidentZone">Non-Residence Zone</label>
          <select class="form-control" name="editNonResidentZone" id="editNonResidentZone" required>
            <option>Select</option>
            <option>KM</option>
            <option>two</option>
            <option>Three</option>
            <option>Four</option>
            <option>Five</option>
          </select>
        </div>
        <div class="form-group" id="editKmZoneDiv">
          <label for="editKmZone">KM zones</label>
          <select class="form-control" name="editKmZone" id="editKmZone" required>
            <option>Select</option>
            <option>Hostel1</option>
            <option>Hostel2</option>
            <option>Hostel3</option>
            <option>Hostel4</option>
            <option>Hostel5</option>
          </select>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
      </form>
    </div>
  </div>
  <script src="main.js" type="text/javascript"></script>
  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
</body>

</html>

我之前遇到的一个问题是,当我将每个文档对象分配给一个变量以减少我编写的代码时,html 文件在浏览器中打开为空,并出现错误找不到您的文件 我通过重复 document.get... 逃脱了它。请帮我解决事件问题。

最佳答案

将所有 addEventListsener 代码更改为如下所示:

document.getElementById('editLocation').addEventListener('change',changeStuff)

应该是changeStuff而不是changeStuff()

使用(),一旦文档准备好,该函数就会被调用。

关于javascript - 更改事件后未调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53763271/

相关文章:

javascript - 等待使用 puppeteer 显示 Google Captcha

javascript - 尝试在两行中定义名称时无法识别\n

.net - 英国地方政府网站的基本无障碍级别是多少?

javascript - 如何使用 AngularJS 1.5 创建具有动态路由的动态页面

html - 有没有更有效的方法让背景位置在悬停时从左到右变化?

javascript - 将 mask Canvas 与 KineticJS 结合使用

javascript - 如何使用js选择不在类内的数据?

javascript - 无法使禁用按钮工作

javascript - 在 html 页面之间移动

html - 如何使用CSS去除轮廓虚线边框