目前,如果具有required
属性的输入字段为空,则会显示浏览器的默认错误消息。如果我删除此属性,由于我的JavaScript代码,它将在输入字段上显示红色边框。我如何同时显示两者?
$("form").submit(function(e) {
e.preventDefault();
var title = document.getElementById('title');
if (!title.value) {
title.classList.add('error');
setTimeout(function() {
title.classList.remove('error');
}, 300);
}
});
.error {
position: relative;
animation: shake .1s linear;
animation-iteration-count: 3;
border: 1px solid red;
}
@keyframes shake {
0% {
left: -5px;
}
100% {
right: -5px;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<input type="text" id="title">
<input type="submit">
</form>
答案 0 :(得分:2)
使用CSS。
最好将其用于无效字段(type=number
字段中的文字或任何其他无效值)。
@keyframes shake3 {
0% {left: -5px}
16% {left: 5px}
33% {left: -5px}
49% {left: 5px}
66% {left: -5px}
80% {left: 5px}
100% {left: 0}
} /* And @keyframes with prefixes */
input:invalid {
border: 2px solid red;
animation-name: shake3;
animation-duration: .4s;
position: relative;
}
<input required >
如果您只想在需要时展示,请将input:invalid
替换为.submited input:invalid
,并将.submited
类添加到表单中以激活样式。
答案 1 :(得分:1)
function validate() {
var title = document.getElementById('title');
if (!title.value) {
title.classList.add('error');
setTimeout(function() {
title.classList.remove('error');
}, 300);
}
}
&#13;
.error {
border: 5px solid red;
}
&#13;
<form>
<input type="text" id="title" required>
<input type="submit" onclick="validate()">
</form>
&#13;
从onsubmit更改为onclick并为了演示目的将可见性/重点添加到边框 - 使用1px和超时窗口更难看到。
答案 2 :(得分:1)
您可以像这样实现:
$("form").submit(function(e) {
e.preventDefault();
// ....
});
$("form input").on("invalid", function(event) {
$('#title').addClass('error');
setTimeout(function() {
$('#title').removeClass('error');
}, 500);
});
&#13;
.error {
position: relative;
animation: shake .1s linear;
animation-iteration-count: 3;
border: 1px solid red;
outline: none;
}
@keyframes shake {
0% {
left: -5px;
}
100% {
right: -5px;
}
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<input type="text" id="title" required>
<input type="submit">
</form>
&#13;
答案 3 :(得分:0)
也许只需在按钮上使用onclick
?
然后,如果验证没问题,那么您可以在表单上以编程方式调用submit
。
function validate() {
var title = document.getElementById('title');
if (!title.value) {
title.classList.add('error');
setTimeout(function() {
title.classList.remove('error');
}, 3000);
} else {
document.getElementById('form').submit()
}
}
&#13;
.error {
border: 1px solid red;
}
&#13;
<form id="form">
<input type="text" id="title" required>
<input type="submit" onclick="validate()">
</form>
&#13;