首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getElementsByClassName.style未定义

getElementsByClassName.style未定义
EN

Stack Overflow用户
提问于 2016-07-09 09:21:29
回答 1查看 8.6K关注 0票数 0

我想更改浏览器中输入的默认错误消息。我打开所有的默认消息,用文本创建隐藏的div,我想为每个无效的输入显示这个div。div中的文本是不同的,对于某些输入,我不需要文本错误。

我的HTML表单:

代码语言:javascript
复制
<form id="registration__form" action="form_handler.php" class="form" method="POST" name="form">

代码语言:javascript
复制
<div>
  <label for="email">email</label>
</div>
<div>
  <input id="email" type="email" name="email" required="required">
  <div class="error-message-2">error 1</div>
</div>
<div>
  <label for="number">number</label>
</div>
<div>
  <input id="number" type="text" name="number" required="required">
  <div class="error-message-2">error 2</div>
</div>
<div>
  <label for="company">company</label>
</div>
<div>
  <input id="company" type="text" name="company" required="required">
</div>
<div>
  company
</div>
<div>
  <input type="password" id="field" data-indicator="pwindicator" name="password" required="required">
</div>
<div>
  <div id="pwindicator" class="pwindicator">
    <div class="bar">
    </div>
    <div class="label"></div>
  </div>
</div>

我的css很简单

代码语言:javascript
复制
.error-message-2 {
  display: none;
  color: #fd1d1e;
 }

我的JS

代码语言:javascript
复制
    function replaceValidationUI(form) {
  // Suppress the default bubbles
  form.addEventListener("invalid", function(event) {
    event.preventDefault();
  }, true);

  // Support Safari, iOS Safari, and the Android browser—each of which do not prevent
  // form submissions by default
  form.addEventListener("submit", function(event) {
    if (!this.checkValidity()) {
      event.preventDefault();
    }
  });

  var submitButton = form.querySelector("button:not([type=button]), input[type=submit]");
  submitButton.addEventListener("click", function(event) {
    var invalidFields = form.querySelectorAll(":invalid"),
      errorMessages = form.querySelectorAll(".error-message"),
      parent;

    // Remove any existing messages
    for (var i = 0; i < errorMessages.length; i++) {
      errorMessages[i].parentNode.removeChild(errorMessages[i]);
    }


    for (var i = 0; i < invalidFields.length; i++) {
      parent = invalidFields[i].parentNode;
      parent.getElementsByClassName("error-message-2").style.display = "block";
    }

    // If there are errors, give focus to the first invalid field
    if (invalidFields.length > 0) {
      invalidFields[0].focus();
    }
  });
}

// Replace the validation UI for all forms
var forms = document.querySelectorAll("form");
for (var i = 0; i < forms.length; i++) {
  replaceValidationUI(forms[i]);
}

这里出现了'getElementsByClassName.style是未定义‘的错误

代码语言:javascript
复制
for (var i = 0; i < invalidFields.length; i++) {
                    parent = invalidFields[i].parentNode;
                    parent.getElementsByClassName("error-message-2").style.display = "block";
            }

怎么啦?

P.S. JSFiddle在这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-09 09:22:45

这是因为getElementsByClassName返回已找到的元素的活动HTMLCollection,所以不能将样式应用于集合。您必须按索引选择特定的元素。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38280291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档