- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试验证一种形式,如果不满足要求,我想在其中显示错误。在此错误中,我想重新使用标签文本。
我没走多远,因此控制台给我的错误是:
Uncaught TypeError: Cannot read properties of null (reading'innerText')at onSubmit (app.js:40:71)at HTMLFormElement.onsubmit (contact.html?userName=&userEmail=&userComment=:43:69)
根据我的理解,元素/标签中的文本(名称、电子邮件、评论)应该存储到 let label
。但它在 .innerText
处给了我错误。
'use strict';
const onSubmit = event => {
event.preventDefault()
for (let element of event.target)
if (element.required) {
let label = document.getElementById(`${element.id}-label`).innerText
let error = ""
switch (element.type) {
case 'text':
if (!isNullOrEmpty(element.value)) {
if (!isMinLength(element.value, element.dataset.requiredMin)) {
error = `Your ${label.toLocaleLowerCase()} must contain at least ${element.dataset.requiredMin} letters.`
}
} else {
error = `You must enter a ${label.toLocaleLowerCase()}`
}
console.log('validera text');
break;
case 'email':
console.log('validera email');
break;
case 'textarea':
console.log('validera lösenord');
break;
}
document.getElementById(`${element.id}-error`).innerText = error
}
}
const isNullOrEmpty = value => {
if (value.length === 0)
return true
return false
}
const isMinLength = (value, minLength = 2) => {
if (value.length >= minLength)
return true
return false
}
<section class="form container">
<h1>Come in Contact with Us</h1>
<form onsubmit="onSubmit(event)" class="contact" novalidate>
<div class="name_email">
<span>
<label id="userName-label" for="userName-input">Name</label>
<input type="text" name="userName" id="userName-input" placeholder="Your Name" required data-required-min="2">
<div id="userName-error"></div>
</span>
<span>
<label id="userEmail-label" for="userEmail-input">Email</label>
<input type="email" name="userEmail" id="userEmail-input" placeholder="Your Email" required>
<div id="userEmail-error"></div>
</span>
</div>
<div>
<label id="userComment-label" for="userComment-input">Comments</label>
<textarea type="text" name="userComment" id="userComment-input" placeholder="Comments" required data-required-min="10"></textarea>
<div id="userComment-error"></div>
</div>
<div class="submitbutton">
<button type="submit" class="button bg-red">Post Comments</button>
</div>
</form>
</section>
最佳答案
问题出在 document.getElementById
的参数中。您的 for 循环遍历 input
元素,而不是 label
。
只需在 Html 中更改输入的 id
值,删除末尾的 -input
。或者,这样的事情应该有效。
'use strict';
const onSubmit = event => {
event.preventDefault()
console.log("el:",event.target)
for (let element of event.target)
if (element.required) {
console.log("=>",element.id)
// look at it
let label = document.getElementById(`${element.id}`.replace('input','label').innerText
let error = ""
switch(element.type) {
case 'text':
if (!isNullOrEmpty(element.value)) {
if (!isMinLength(element.value, element.dataset.requiredMin)) {
error = `Your ${label.toLocaleLowerCase()} must contain at least ${element.dataset.requiredMin} letters.`
}
} else {
error = `You must enter a ${label.toLocaleLowerCase()}`
}
console.log('validera text');
break;
case 'email':
console.log('validera email');
break;
case 'textarea':
console.log('validera lösenord');
break;
}
// look at it
document.getElementById(`${element.id}`.replace("input","error")).innerText = error
}
}
const isNullOrEmpty = value =>{
if (value.length === 0)
return true
return false
}
const isMinLength = (value, minLength = 2) =>{
if (value.length >= minLength)
return true
return false
}
关于javascript - 表单验证 -> 从标签元素 .innerText 获取的错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74039087/
有没有办法只获取顶部元素的 innerText(并忽略子元素的 innerText)? 例子: top node text child node text 如何在忽略“子节点文本”
我想获取 的 innerText没有 innerText在跨度内...这是页面的 HTML: var title = document.querySelector('div.col-md-8.inf
在这种情况下,我尝试使用关卡菜单,但是 this.innerText 不起作用 function levelJump() { console.log(this);// Window {wind
假设我有:return this value 基本上我想得到 的 innerText基于类名的标签。 问题是当我尝试:alert(document.getElementsByClassName("h
我有一个 html 元素,例如: Change only mebut not me 但我只想更改第一个文本并让子 div 保持原样 document.getElementById("el1").inn
1st Division 2016/2017
我有一些这样的HTML(我无法更改): Employee Name: John Smith 我想使用xpath提取“ John Smith”部
当节点在集合中时,有没有办法获取节点的内部文本目前我有这个 Collection DependentNodes = new Collection(); foreach (XmlNode node in
我想知道 innerText 属性。考虑以下标记: HTML foo bar 然后,让我们运行以下代码: JS var
我有一个包含一些文本的 div 和一个子 div。我想更新外部 div 文本并保留子 div。 some text here 如果我尝试 outer.innerText = "foo",向下
我的以下代码有错误。如果选择了元素(选择的类是选择的元素),我试图获取 id id05 的值。 HTML: t1
我写了这段代码: // Welcome to ASP.NET! 当我运行它时,出现此错误:无法设置未定义或空引用的属性“in
我们有这样的 XML: Some text here Child 1 Child 2 我们正在使用 XmlDocument 来解析它。 当我们有“节点”元素的 XmlNo
我如何将文本添加到 XML 元素中?例如: I want to add text here 我已经创建了 DOMDocument,并开始添加元素。这是我需要将文本添加到的元素。 $title = $v
假设您有一个按钮可以替换同一区域、同一页面内的段落。 您能否通过设置 innerText 或 textContent 使每次切换都淡入? 我现在使用 keyframes 将其不透明度从 0 更改为 1
我想问一下如何通过 Javascript 更改单选按钮的标签 innerText(见下面的代码)同时不清除输入标签里面。此处的标签 innerText 表示“Button-Label-X”。 我尝试通
我试图获取元素的 innerText,但 Chrome 返回一个空字符串,因为我的元素被隐藏了。 Firefox 没有。 即使元素不可见,是否有办法在 Chrome 中检索 innerText? co
刚从jQuery 1.3.2升级到1.8.2,发现1.3.2的几个功能不能用了。我已经修复了其中的大部分问题,但仍停留在这个问题上: 我需要根据表格单元格中的前几个字符进行搜索(“开头为”搜索),但此
假设我有以下代码: some text var d = document.getElementByid('d'); var innerText = d.inn
我正在尝试编写一个函数(在 JavaScript 中),它将在 中写一个句子例如,通过在每个字母之间停顿 300 毫秒,一个接一个地写入其字母来标记。我写了以下内容: var tex
我是一名优秀的程序员,十分优秀!