📅  最后修改于: 2023-12-03 15:30:35.224000             🧑  作者: Mango
在 JavaScript 事件处理中,我们通常会使用 e.target
来获取触发事件的 DOM 元素。但是,有时候我们会发现 e.target.name
不起作用。这可能是由于以下几个原因:
name
属性不存在或未定义如果你的 HTML 元素没有定义 name
属性,或者定义了但没有赋值,那么在事件处理中使用 e.target.name
将会返回 undefined
。
<input type="text"> <!-- 没有定义 name 属性 -->
document.querySelector('input').addEventListener('input', function(e) {
console.log(e.target.name); // 输出 undefined
});
name
属性不是事件的目标如果你的 HTML 元素有多个子元素,而你在子元素上绑定了事件处理器,那么 e.target.name
将会返回 undefined
。因为此时 e.target
实际上是子元素,而不是包含子元素的父元素。
<form>
<div>
<label for="name">姓名:</label>
<input type="text" name="name" id="name">
</div>
<div>
<label for="email">邮箱:</label>
<input type="email" name="email" id="email">
</div>
<button type="submit">提交</button>
</form>
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
console.log(e.target.name); // 输出 undefined
});
在上面的代码中,我们在表单元素上绑定了 submit
事件处理器,但是 e.target
实际上是按钮元素,因此 e.target.name
是 undefined
。
如果你想要获取表单元素的 name
属性,可以使用 FormData
对象来处理表单数据。
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(e.target); // 获取表单数据
console.log(formData.get('name')); // 输出表单元素的 name 属性
});
name
属性在不同的元素中有不同的行为在某些 HTML 元素中,name
属性具有不同的行为。例如,对于 input
元素的不同类型,name
属性会有不同的取值方式。
name
属性的取值方式与上述情况相同。name
属性的取值方式与 checked
属性相关。即只有选中的单选框或复选框才会提交对应的 name
值。<form>
<div>
<input type="radio" name="gender" value="male" id="male">
<label for="male">男</label>
<input type="radio" name="gender" value="female" id="female">
<label for="female">女</label>
</div>
<div>
<input type="checkbox" name="hobby" value="reading" id="reading">
<label for="reading">阅读</label>
<input type="checkbox" name="hobby" value="running" id="running">
<label for="running">跑步</label>
</div>
<button type="submit">提交</button>
</form>
document.querySelector('form').addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(e.target); // 获取表单数据
console.log(formData.get('gender')); // 输出单选框的选中值
console.log(formData.getAll('hobby')); // 输出复选框的选中值(可能有多个)
});
在上面的代码中,我们分别创建了单选框和复选框,并分别给它们指定了相同的 name
属性。在提交表单时,我们使用 FormData
对象来获取表单数据,并使用 formData.get
和 formData.getAll
方法来获取选中的值。
综上所述,我们需要根据具体的情况来选择合适的方法来获取元素的 name
属性并进行处理。当 e.target.name
不起作用时,我们需要仔细排查问题,并根据不同的情况进行处理。