javascript - 不使用 getAttribute('name') 捕获第二个表单属性名称;
问题描述
我只是在查看一个项目的 JavaScript 事件,但是如果有这样的第二个事件,我找不到它不起作用或不显示事件的原因 getAttribute('name') :
<form name='otherRegistration'>
<input type="email"></input>
<button class="btn btn-safe col-xs-6"></button>
</form>
<form name='registration'>
<button class="btn btn-security col-xs-6"></button>
</form>
问题是,如果它捕获第一个表单名称的名称属性otherRegistration
但没有捕获第二个表单的名称,registration
这很奇怪,我不知道为什么会发生这种情况,我仔细检查过,找不到原因.
一旦具有表单的属性名称不输入我不明白的if,因为,如果它用typeof修改并返回字符串
如果您能帮助我理解解决方案的原因和解决方案,我将不胜感激,这里是代码:
function userSessionSubmit() {
var form = document.querySelector('form');
var formName = '';
form.addEventListener('click', function () {
formName = form.getAttribute('name');
console.log(formName);
switch (formName) {
case 'otherRegistration':
alert('TRIGGER OTHER'); //works
break;
case 'registration':
alert('TRIGGER REGIS'); //does not work...
break;
default:
alert('nothing');
break;
}
});
};
userSessionSubmit();
解决方案
document.querySelector(selector)
选择一个元素 - 在页面上找到的第一个元素。
要使用一个查询选择多个元素,您应该使用document.querySelectorAll(selector)
并将其分配给一个变量。
示例代码:
const forms = document.querySelectorAll('form'); // select all forms on the page
Array.prototype.forEach.call(forms, (form) => {
form.addEventListener('click', listenerFunc); // add on click listener to every form
}); // iterate trough found elements
编辑:
你应该考虑在你的监听器中使用匿名函数——你不能removeEventListener()
在匿名函数上使用。
推荐阅读
- wordpress - 如何防止从在线课程中下载视频
- .net - 错误 MSB3073:命令“npm run build”以代码 1 退出
- r - 在R中查找字符串中重复次数最多的字符
- java - 两个线程获得相同的值
- python - 这甚至可能吗?将命令/对象从一个 python shell 发送到另一个?
- python - 如何计算 Python 列表中“最少出现”的元素?
- c# - Unity拖放,与索引问题作斗争
- c# - 在 Linq 中使用 GroupBy:不支持客户端 GroupBy
- python - 如何检查字符串是否在列表中,使用每个项目上的函数(python3)
- c# - 使用页面对象模型和页面工厂时如何在 Selenium WebDriver C# 中应用隐式等待