输入无效后如何设置DOM的样式?

时间:2018-06-24 15:36:57

标签: javascript forms validation input styling

我在任务中需要帮助。输入的电子邮件无效后,我必须更改文本的颜色,表格的边框并添加新段落。我在JS中写了这样的代码:

$(document).ready(function () {
    if ($("#mail").is(':invalid')) {
        $("#mail_label").css('color', 'red');
        $("#mail").css('border', '1px solid red');
        var para = document.createElement("p");
        var node = document.createTextNode("Invalid email address");
        para.appendChild(node);

        var element = document.getElementById("new_paragraph");
        element.appendChild(para);
        para.setAttribute('id', 'new_text');
        $("#new_text").css({'color': 'red', 'text-align': 'right', 'margin-right': '5%', 'font-size': '12px'});
    };
});

这是我希望的DOM样式,但是从一开始就因为我的占位符是“输入您的电子邮件地址”。我希望它在输入无效后设置样式。我该如何实现?

如果将占位符更改为xy@xy.com,则我的网站将具有正常样式。但是,当我输入无效的邮件时,代码不会运行。

能帮我吗?对我来说非常重要,因为这是我的实习招聘任务。

1 个答案:

答案 0 :(得分:0)

最好使用class和css设置文档样式。

这是使用'classList''cloneNode'进行优化的代码。

var para = document.createElement("p");
var node = document.createTextNode("Invalid email address");
para.appendChild(node);

$(document).ready(function() {
  var new_paragraph = document.getElementById("new_paragraph");

  document.getElementById("mail").addEventListener("input", mail_changed);
});

function mail_changed() {
  if (!this.checkValidity()) {
    this.parentElement.classList.add("error");
    new_paragraph.appendChild(para.cloneNode(true));
  } else {
    this.parentElement.classList.remove("error");
    new_paragraph.innerHTML = "";
  }
}
form p.error input {
  border: 1px solid red;
}

form p.error label {
  color: red;
}

#new_paragraph p {
  color: red;
  text-align: right;
  margin-right: 5%;
  font-size: 12px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <p>
    <label for="mail" id="mail_label">Mail: </label>
    <input type="email" id="mail" name="mail" placeholder="Enter your mail">
  </p>
</form>
<div id="new_paragraph"></div>