首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在加载/重新加载页面时隐藏验证输出标记(✘)符号隐藏

在加载/重新加载页面时隐藏验证输出标记(✘)符号隐藏
EN

Stack Overflow用户
提问于 2013-07-31 16:07:31
回答 1查看 245关注 0票数 1

我使用下面的代码以及输入框上的HTML5模式匹配以及CSS3 :invalid:valid伪选择器在输入框旁边可用的div.input-validation中显示验证的输出(有效值或无效值)。这按预期工作,但它在页面加载过程中和重新加载页面时显示验证标记(✘- invalid input)。我该如何避免这种情况呢?

代码:

代码语言:javascript
复制
<style type="text/css">
  input {
    font-size: 1em;
    padding: .3em;
    border-radius: 3px;
    margin: .2em;
  } 
  input[type="text"]:valid {
    color: green;
  }
  input[type="text"]:valid ~ .input-validation::before {
    content: "\2714";
    color: green;
  }
  input[type="text"]:invalid ~ .input-validation::before {
    content: "\2718";
    color: red;
  }
  .input-validation {
    display: inline-block;
  } 
</style>
<?echo $passwordregister;?>
<input name="pw" autocomplete="off" type="text" id="pw" pattern="[a-zA-Z0-9]{6,22}" autofocus required >
<div class="input-validation"></div>
EN

回答 1

Stack Overflow用户

发布于 2013-07-31 16:32:30

可以使用下列任一选项在页面加载时隐藏无效值(✘)符号。

选项1:在页面加载时隐藏包含符号的span,并仅当输入文本框上发生某个keypress事件时才显示它。

代码语言:javascript
复制
window.onload = function() {
  var el = document.querySelectorAll("input[type='text']");
  for (var i = 0; i < el.length; i++) {
    el[i].onkeypress = showSymbol;
  }

  function showSymbol() {
    this.nextElementSibling.style.display = "inline-block"; // display the span next to the input in which key was pressed.
  }
}
代码语言:javascript
复制
input {
  font-size: 1em;
  padding: .3em;
  border-radius: 3px;
  margin: .2em;
}
input[type="text"]:valid {
  color: green;
}
input[type="text"]:valid + .input-validation::before {
  content: "\2714";
  color: green;
}
input[type="text"]:invalid + .input-validation::before {
  content: "\2718";
  color: red;
}
.input-validation {
  display: none;
}
代码语言:javascript
复制
<input name="pw" autocomplete="off" type="text" id="pw" class="new" pattern="[a-zA-Z0-9]{6,22}" autofocus required/> <span class="input-validation"></span>

CSS选项2:根据某个类(比如visited)的存在来定义规则,并且只在输入框中按下某个键时才分配这个类。

代码语言:javascript
复制
window.onload = function() {
  var el = document.querySelectorAll("input[type='text']");
  for (var i = 0; i < el.length; i++) {
    el[i].onkeypress = showSymbol;
  }

  function showSymbol() {
    this.classList.add("visited"); // add the visited class
  }
}
代码语言:javascript
复制
input {
  font-size: 1em;
  padding: .3em;
  border-radius: 3px;
  margin: .2em;
}
input[type="text"].visited:valid {
  color: green;
}
input[type="text"].visited:valid + .input-validation::before {
  content: "\2714";
  color: green;
}
input[type="text"].visited:invalid + .input-validation::before {
  content: "\2718";
  color: red;
}
.input-validation {
  display: inline-block;
}
代码语言:javascript
复制
<input name="pw" autocomplete="off" type="text" id="pw" class="new" pattern="[a-zA-Z0-9]{6,22}" autofocus required/> <span class="input-validation"></span>

备注:

  • 我已经用+替换了CSS选择器中的~,因为~选择了所有与选择器匹配的同级,而+只选择了相邻的同级。使用~时,只要您在第一个输入框中键入值,就会立即显示所有输入框旁边的span (当表单中有多个输入框时)。
  • 我还将.input-validationdiv修改为span,但这更多是个人喜好,您可以保留原始div本身,而functionality.

没有任何差异

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

https://stackoverflow.com/questions/17964904

复制
相关文章

相似问题

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