我使用下面的代码以及输入框上的HTML5模式匹配以及CSS3 :invalid和:valid伪选择器在输入框旁边可用的div.input-validation中显示验证的输出(有效值或无效值)。这按预期工作,但它在页面加载过程中和重新加载页面时显示验证标记(✘- invalid input)。我该如何避免这种情况呢?
代码:
<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>发布于 2013-07-31 16:32:30
可以使用下列任一选项在页面加载时隐藏无效值(✘)符号。
选项1:在页面加载时隐藏包含符号的span,并仅当输入文本框上发生某个keypress事件时才显示它。
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.
}
}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;
}<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)的存在来定义规则,并且只在输入框中按下某个键时才分配这个类。
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
}
}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;
}<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-validation从div修改为span,但这更多是个人喜好,您可以保留原始div本身,而functionality.没有任何差异
https://stackoverflow.com/questions/17964904
复制相似问题