9-10关于JS初学产生的问题

1.页面添加加载完成事件监听,页面加载完成后,执行页面初始化方法/函数; 这是什么意思

这句话描述的是前端开发中一种常见的操作:等待页面完全加载完成后,再执行特定的初始化代码

简单来说,就是要确保页面上的所有元素(图片、样式、脚本等)都加载完毕后,才开始运行那些需要操作这些元素的代码,避免因元素未加载而导致的错误。

为什么需要这样做?

浏览器加载网页是一个逐步的过程:

  1. 先解析 HTML 结构
  2. 加载 CSS 样式
  3. 加载图片等资源
  4. 执行 JavaScript 代码

如果 JavaScript 代码在页面元素还没加载完成就运行(比如想获取一个还没加载的图片尺寸),就会出现 "找不到元素" 或 "获取到错误信息" 的问题。

如何实现?

在 JavaScript 中,常用的实现方式有两种:

1. 使用 window.onload 事件

javascript

javascript 复制代码
// 页面完全加载完成后,自动执行这个函数
window.onload = function() {
  // 这里写页面初始化的代码
  initPage(); // 调用初始化方法
};

// 初始化方法
function initPage() {
  console.log("页面已完全加载,开始初始化...");
  // 例如:获取页面元素、绑定事件、渲染数据等操作
}
2. 使用事件监听器(更推荐,可绑定多个事件)

javascript

javascript 复制代码
// 给window绑定"load"事件,指定回调函数
window.addEventListener('load', function() {
  initPage(); // 页面加载完成后执行初始化
});

function initPage() {
  console.log("初始化开始...");
  // 执行各种初始化操作
}

实际应用场景

这种机制常用于:

  • 初始化页面交互(如绑定按钮点击事件)
  • 加载数据后渲染页面内容
  • 获取图片等资源的实际尺寸
  • 启动页面动画或特效

总之,就是确保所有 "操作页面元素" 的代码,都在元素 "准备好" 之后再执行。

什么是事件监听器?

事件监听器(Event Listener)是前端开发中用于检测并响应页面交互行为的机制,简单来说就是 "监听事件发生,然后执行对应操作" 的工具。

它的工作原理类似 "报警器":你提前设置好 "监听什么事件"(比如点击按钮、输入文字、鼠标移动等),当这个事件真的发生时,就会自动触发你预设的处理函数(比如弹出提示、提交表单、改变样式等)。

为什么需要事件监听器?

网页的核心是交互,用户会进行点击、输入、滚动等操作。事件监听器让开发者能够:

  • 感知用户的行为(如 "用户点击了登录按钮")
  • 对行为做出反应(如 "点击后验证表单并提交")
  • 实现动态交互效果(如 "鼠标悬停时按钮变色")

基本用法(以 JavaScript 为例)

最常见的方式是用 addEventListener 方法给元素绑定监听器:

javascript

运行

javascript 复制代码
// 1. 获取需要监听的元素(比如一个按钮)
const btn = document.getElementById('myButton');

// 2. 给元素添加事件监听器
// 第一个参数:事件类型(如'click'表示点击事件)
// 第二个参数:事件发生时要执行的函数(处理逻辑)
btn.addEventListener('click', function() {
  alert('按钮被点击了!'); // 事件触发后执行的操作
});

常见事件类型

监听器可以监听的事件非常多,常见的有:

  • 鼠标事件:click(点击)、mouseover(鼠标悬停)、mouseout(鼠标离开)
  • 键盘事件:keydown(按键按下)、keyup(按键松开)
  • 表单事件:submit(表单提交)、input(输入框内容变化)
  • 页面事件:load(页面加载完成)、resize(窗口大小改变)

特点

  1. 灵活性:同一个元素可以绑定多个监听器(比如一个按钮既监听点击,又监听鼠标悬停)。
  2. 可移除 :通过 removeEventListener 可以取消监听,避免不必要的执行。
  3. 不阻塞:监听器不会影响页面加载,只有事件发生时才会运行。

简单说,事件监听器是让网页 "活起来" 的核心机制,没有它,网页就只能是静态的展示,无法响应用户操作。

用户在使用页面时不会直接 "感受到" 事件监听器本身的存在,因为事件监听器是后台运行的机制,就像电路中的 "开关感应装置"------ 用户只看到 "按开关灯亮了",但不会察觉到背后的感应装置在工作。

但用户会间接感受到事件监听器带来的效果,比如:

  • 点击按钮后弹出对话框(点击事件监听器在工作)
  • 输入文字时实时验证格式(输入事件监听器在工作)
  • 页面加载完自动显示数据(加载完成事件监听器在工作)

简单说,事件监听器是 "幕后工作者",用户看到的是它触发的交互结果,而不会直接感知到 "监听" 这个动作本身。

2.页面初始化函数定义和逻辑实现,实现表格数据的初始化加载,不是直接在DOM结构里写好,而是通过对第一条里定义的表格对象数据的处理,实现表格中数据的展示; 这是什么意思

这句话描述的是一种动态渲染表格数据 的开发方式,核心思想是:表格的内容不是一开始就写死在 HTML 里,而是通过 JavaScript 代码动态生成并展示

简单来说,就是先准备好数据(通常是数组或对象形式),再通过代码将这些数据 "填充" 到表格中,而不是直接在 HTML 中写<tr><td>...</td></tr>这样的表格内容。

具体实现思路拆解

1. 准备工作:
  • HTML 中只定义表格的 "空架子"(表头可能固定,表体内容为空)
  • JavaScript 中定义表格数据(通常是数组对象,每条数据对应一行)
  • 编写初始化函数:负责将数据 "转换" 成表格的 HTML 结构并插入页面
2. 示例代码(直观理解)

HTML 部分(只定义表格框架):

html

html 复制代码
<table id="myTable" border="1">
  <thead>
    <tr>
      <th>ID</th>
      <th>姓名</th>
      <th>年龄</th>
    </tr>
  </thead>
  <tbody id="tableBody">
    <!-- 这里的内容会通过JS动态生成,而不是提前写死 -->
  </tbody>
</table>

JavaScript 部分(数据处理和动态渲染):

javascript

javascript 复制代码
// 1. 定义表格数据(第一条里提到的"表格对象数据")
const tableData = [
  { id: 1, name: "张三", age: 25 },
  { id: 2, name: "李四", age: 30 },
  { id: 3, name: "王五", age: 28 }
];

// 2. 定义页面初始化函数(处理数据并渲染表格)
function initTable() {
  // 获取表格的tbody元素(要填充内容的容器)
  const tableBody = document.getElementById("tableBody");
  
  // 清空现有内容(防止重复渲染)
  tableBody.innerHTML = "";
  
  // 遍历数据,动态生成表格行
  tableData.forEach(item => {
    // 创建一行<tr>
    const row = document.createElement("tr");
    
    // 给这一行添加内容(<td>)
    row.innerHTML = `
      <td>${item.id}</td>
      <td>${item.name}</td>
      <td>${item.age}</td>
    `;
    
    // 将生成的行添加到tbody中
    tableBody.appendChild(row);
  });
}

// 3. 页面加载完成后执行初始化函数
window.addEventListener("load", initTable);

为什么要这样做?

  1. 数据与视图分离:数据存放在 JS 中,方便修改和维护(比如从后端获取新数据后,只需重新调用初始化函数即可刷新表格)。

  2. 灵活性更高:可以动态处理数据(比如排序、筛选、格式化)后再展示。例如:

    javascript

    javascript 复制代码
    // 只显示年龄大于26的用户
    const filteredData = tableData.filter(item => item.age > 26);
  3. 适合动态数据场景:如果数据需要从服务器加载(比如通过接口获取),这种方式是唯一选择(因为无法提前知道服务器返回的数据)。

  4. 便于复用:同一个初始化函数可以在不同场景下(比如数据更新后)重复调用,避免重复编写 HTML 代码。

总结

这种方式的核心就是:用 JavaScript 代码做 "桥梁",把数据转换成用户能看到的表格内容,而不是直接在 HTML 中写死内容。用户最终看到的表格和直接写在 HTML 里的效果一样,但开发者维护和更新数据会更方便。

在 JavaScript 中,动态调整用户内容(比如文本、表格、表单等)通常是通过操作 DOM(文档对象模型) 来实现的,核心思路是:通过 JS 代码找到页面元素,然后修改其内容、样式或结构。

以下是几种常见的动态调整方式及示例:

1. 直接修改元素内容(最常用)

通过 innerHTMLtextContent 属性修改元素的文本或 HTML 内容。

javascript

运行

javascript 复制代码
// 获取元素
const contentDiv = document.getElementById('userContent');

// 方式1:修改纯文本(不会解析HTML标签)
contentDiv.textContent = '新的用户内容';

// 方式2:修改带HTML的内容(会解析HTML标签)
contentDiv.innerHTML = '<strong>加粗的内容</strong><p>新段落</p>';

2. 动态更新表格数据(基于之前的表格示例)

如果需要修改表格中的数据,可以重新生成表格内容:

javascript

运行

javascript 复制代码
// 原始数据
let tableData = [
  { id: 1, name: "张三", age: 25 },
  { id: 2, name: "李四", age: 30 }
];

// 动态修改数据(比如添加新用户)
function addUser(newUser) {
  tableData.push(newUser);
  // 重新渲染表格(复用之前的初始化函数)
  initTable(); 
}

// 调用示例:添加新用户并刷新表格
addUser({ id: 3, name: "赵六", age: 22 });

3. 根据用户操作动态调整

结合事件监听器,根据用户的点击、输入等行为实时调整内容:

html

预览

html 复制代码
<!-- HTML -->
<input type="text" id="userInput" placeholder="输入内容">
<button id="updateBtn">更新内容</button>
<div id="displayArea"></div>

javascript

运行

javascript 复制代码
// JS
const input = document.getElementById('userInput');
const btn = document.getElementById('updateBtn');
const display = document.getElementById('displayArea');

// 点击按钮时,将输入框内容显示到区域中
btn.addEventListener('click', () => {
  display.textContent = input.value; // 动态同步输入内容
});

// 实时同步(输入时立即更新)
input.addEventListener('input', () => {
  display.textContent = input.value;
});

4. 动态修改样式

不仅可以改内容,还能通过 JS 调整元素的样式:

javascript

运行

javascript 复制代码
const element = document.getElementById('userContent');

// 方式1:直接修改style属性
element.style.color = 'red'; // 文字变红
element.style.fontSize = '18px'; // 字体变大

// 方式2:添加/移除CSS类(推荐,更易维护)
element.classList.add('highlight'); // 添加高亮类
element.classList.remove('old-style'); // 移除旧样式类

对应的 CSS:

css

css 复制代码
.highlight {
  background: yellow;
  border: 2px solid orange;
}

5. 动态添加 / 删除元素

根据需要创建新元素或删除现有元素:

javascript

运行

javascript 复制代码
// 动态创建新元素
const newParagraph = document.createElement('p');
newParagraph.textContent = '这是新添加的段落';
document.body.appendChild(newParagraph); // 添加到页面

// 动态删除元素
const oldElement = document.getElementById('toRemove');
oldElement.remove(); // 直接删除

核心逻辑总结

动态调整用户内容的步骤通常是:

  1. 获取目标元素 (通过 getElementByIdquerySelector 等方法);
  2. 处理数据(修改、筛选、新增数据等);
  3. 更新 DOM(修改内容、样式或结构);
  4. 绑定事件(可选,让内容能响应用户操作)。

这种方式能让页面根据用户行为或数据变化实时更新,实现动态交互效果。

3.编辑按钮、添加按钮、删除按钮添加点击事件监听,实现表单弹窗的显示与隐藏; 这是什么意思

这句话描述的是一种常见的前端交互功能:给 "编辑""添加""删除" 这三个按钮分别绑定点击事件,当用户点击这些按钮时,通过事件监听器控制表单弹窗的显示或隐藏

简单来说,就是:

  • 点击 "添加" 按钮 → 显示表单弹窗(用于填写新数据)
  • 点击 "编辑" 按钮 → 显示表单弹窗(用于修改已有数据)
  • 弹窗中通常还有 "关闭" 或 "取消" 按钮 → 点击后隐藏弹窗

实现思路拆解

1. 基础结构

需要三个按钮、一个表单弹窗(默认隐藏):

html

预览

html 复制代码
<!-- 操作按钮 -->
<button id="addBtn">添加</button>
<button id="editBtn">编辑</button>
<button id="deleteBtn">删除</button>

<!-- 表单弹窗(默认隐藏) -->
<div id="formModal" class="modal">
  <div class="modal-content">
    <span class="closeBtn">&times;</span>
    <form>
      <!-- 表单内容:输入框、下拉框等 -->
      <input type="text" placeholder="请输入内容">
      <button type="submit">提交</button>
    </form>
  </div>
</div>
2. 核心逻辑

通过 CSS 控制弹窗默认隐藏,再用 JS 给按钮添加点击事件,动态切换弹窗的显示状态:

css

css 复制代码
/* 弹窗默认隐藏 */
.modal {
  display: none; /* 隐藏 */
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0,0,0,0.5); /* 半透明背景 */
}

/* 弹窗内容样式 */
.modal-content {
  background-color: white;
  margin: 15% auto;
  padding: 20px;
  width: 50%;
  position: relative;
}

/* 关闭按钮样式 */
.closeBtn {
  position: absolute;
  top: 10px;
  right: 20px;
  font-size: 28px;
  cursor: pointer;
}

javascript

运行

javascript 复制代码
// 获取元素
const addBtn = document.getElementById('addBtn');
const editBtn = document.getElementById('editBtn');
const deleteBtn = document.getElementById('deleteBtn');
const formModal = document.getElementById('formModal');
const closeBtn = document.querySelector('.closeBtn');

// 显示弹窗的函数
function showModal() {
  formModal.style.display = 'block';
}

// 隐藏弹窗的函数
function hideModal() {
  formModal.style.display = 'none';
}

// 给按钮添加点击事件监听
addBtn.addEventListener('click', showModal);  // 点击添加 → 显示弹窗
editBtn.addEventListener('click', showModal); // 点击编辑 → 显示弹窗
deleteBtn.addEventListener('click', showModal); // 点击删除 → 显示弹窗(也可单独处理)
closeBtn.addEventListener('click', hideModal);  // 点击关闭 → 隐藏弹窗

// 点击弹窗外部区域也隐藏弹窗
window.addEventListener('click', (e) => {
  if (e.target === formModal) {
    hideModal();
  }
});

实际场景中的差异

  • 添加按钮:点击后显示空表单,用于输入新数据
  • 编辑按钮:点击后显示带有当前数据的表单(需要先加载数据到表单中)
  • 删除按钮:有时会显示确认弹窗(而非表单),确认后执行删除操作

通过这种方式,用户可以在不跳转页面的情况下完成数据的添加、编辑、删除操作,提升交互体验。

4.通过console.og的调试方式,在弹出的表单窗口点击不同按钮时,控制台输出打印不同信息,如取消按5.钮,点击后控制台输出"您点击了取消按钮,数据将不会保存!",如保存按钮,点击后控制台输出"您点击了保存按钮,数据将进行保存,保存的数据如下:",保存按钮点击后依次打印出表单中手动输入的内容

这句话描述的是一种前端开发中常用的调试方式:当用户与表单弹窗中的不同按钮(取消按钮、保存按钮)交互时,通过 console.log() 方法在浏览器控制台输出对应的调试信息,方便开发者确认代码逻辑是否正常运行。

简单来说,就是:

  • 点击 "取消" 按钮 → 控制台显示 "您点击了取消按钮,数据将不会保存!"
  • 点击 "保存" 按钮 → 控制台先显示 "您点击了保存按钮,数据将进行保存,保存的数据如下:",然后依次显示用户在表单中输入的内容

实现思路与示例代码

1. 先完善 HTML 结构(添加取消和保存按钮)

html

html 复制代码
<!-- 表单弹窗 -->
<div id="formModal" class="modal">
  <div class="modal-content">
    <span class="closeBtn">&times;</span>
    <form id="myForm">
      <input type="text" id="username" placeholder="请输入用户名"><br>
      <input type="email" id="email" placeholder="请输入邮箱"><br>
      <button type="button" class="cancelBtn">取消</button>
      <button type="button" class="saveBtn">保存</button>
    </form>
  </div>
</div>
2. JavaScript 逻辑(添加点击事件与控制台输出)

javascript

javascript 复制代码
// 获取元素
const cancelBtn = document.querySelector('.cancelBtn');
const saveBtn = document.querySelector('.saveBtn');
const usernameInput = document.getElementById('username');
const emailInput = document.getElementById('email');

// 取消按钮点击事件
cancelBtn.addEventListener('click', () => {
  // 控制台输出取消信息
  console.log('您点击了取消按钮,数据将不会保存!');
  // 隐藏弹窗(复用之前的hideModal函数)
  hideModal();
});

// 保存按钮点击事件
saveBtn.addEventListener('click', () => {
  // 1. 控制台输出保存提示
  console.log('您点击了保存按钮,数据将进行保存,保存的数据如下:');
  
  // 2. 获取表单中用户输入的内容
  const username = usernameInput.value;
  const email = emailInput.value;
  
  // 3. 依次打印输入的内容到控制台
  console.log('用户名:', username);
  console.log('邮箱:', email);
  
  // (可选)隐藏弹窗
  hideModal();
});

实际效果

当用户操作时,打开浏览器控制台(按 F12 或 Ctrl+Shift+I)会看到:

  • 点击 "取消" → 控制台显示对应提示文字
  • 点击 "保存" → 先显示保存提示,然后依次显示用户输入的用户名和邮箱

为什么要这样做?

这是开发阶段常用的调试手段:

  1. 验证按钮点击事件是否正常绑定(是否能触发)
  2. 确认表单数据是否能正确获取(输入的内容是否被 JS 读到)
  3. 无需后端接口,就能在开发阶段测试数据处理逻辑

等功能调试完成后,这些 console.log() 可以保留或删除,不影响用户看到的页面效果。

5.Input标签添加监听事件"input",结合console.og实现手动输入信息后,立即在控制台打印输入的内容。

这句话描述的是一种实时监听用户输入的功能:给输入框(input 标签)绑定 "input" 事件,当用户在输入框中手动输入内容时(包括打字、删除、粘贴等),会立即触发事件,并通过console.log()在浏览器控制台实时打印出当前输入的内容

简单来说,就是用户在输入框中每输入一个字符(或删除字符),控制台都会立刻显示输入框当前的完整内容,方便开发者实时查看用户输入的变化。

实现思路与示例代码

1. HTML 结构(一个输入框)

html

预览

html 复制代码
<input type="text" id="myInput" placeholder="请输入内容...">
2. JavaScript 逻辑(绑定 input 事件并打印内容)

javascript

运行

javascript 复制代码
// 获取输入框元素
const inputElement = document.getElementById('myInput');

// 给输入框添加input事件监听
inputElement.addEventListener('input', function() {
  // 获取当前输入框中的内容
  const inputValue = this.value;
  
  // 在控制台打印输入的内容
  console.log('当前输入内容:', inputValue);
});

实际效果

当用户操作输入框时:

  • 输入第一个字符(比如 "a")→ 控制台立即显示:当前输入内容:a
  • 继续输入第二个字符(变成 "ab")→ 控制台立即显示:当前输入内容:ab
  • 删除一个字符(变回 "a")→ 控制台立即显示:当前输入内容:a
  • 粘贴一段文字(比如 "hello")→ 控制台立即显示:当前输入内容:hello

为什么要这样做?

这是开发中常用的调试和功能验证方式:

  1. 实时确认输入框的内容是否能被 JavaScript 正确获取
  2. 调试输入验证逻辑(比如实时检查输入格式是否符合要求)
  3. 观察用户输入习惯(开发阶段分析用)

这种实时监听的机制,也是实现 "实时搜索提示""输入字数统计" 等功能的基础。

相关推荐
一只小风华~2 小时前
Vue:事件处理机制详解
前端·javascript·vue.js·typescript·前端框架
索迪迈科技3 小时前
Flink Task线程处理模型:Mailbox
java·大数据·开发语言·数据结构·算法·flink
太阳的后裔4 小时前
随笔一些用C#封装的控件
开发语言·c#
tianyuanwo4 小时前
Rust语言组件RPM包编译原理与Cargo工具详解
开发语言·网络·rust·rpm
dy17176 小时前
element-plus表格默认展开有子的数据
前端·javascript·vue.js
CodeCraft Studio9 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
零点零一9 小时前
VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助
开发语言·qt
lingchen190611 小时前
MATLAB的数值计算(三)曲线拟合与插值
开发语言·matlab
gb421528711 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python