这是我的剧本:
<script>
$('.change_password_button').click(function() {
var error = [];
if (!$('.password').val()) {
error[0] = "Current password field is empty.";
}
if (!$('.new_password').val()) {
error[1] = "New password field is empty.";
}
if (!$('.confirm_password').val()) {
error[2] = "Confirm password field is empty.";
}
if ($('.new_password').val() != $('.confirm_password').val()) {
error[3] = "Your new password and confirm password fields do not match.";
}
for (var i = 0; i < error.length; i = i + 1) {
$('#errors').show();
$('#errors').html(error[i]);
}
});
</script>
我想显示一次发生的所有错误,但是现在它只显示一条错误消息。提前感谢您的回答。
答案 0 :(得分:5)
你有很多问题。
问题1:首先,如果没有错误,索引零会发生什么?这是未定义的。
解决方案:使用推送,请勿设置索引。
问题2:其次,您只是在循环中设置innerHTML,以便继续覆盖它。
解决方案:加入数组
问题3:你的val()检查不起作用,
解决方案:您需要检查长度
$('.change_password_button').click(function(){
var error = [];
if (!$('.password').val().length) {
error.push("Current password field is empty.");
};
if (!$('.new_password').val().length) {
error.push("New password field is empty.");
};
if (!$('.confirm_password').val().length) {
error.push("Confirm password field is empty.");
};
if ($('.new_password').val() != $('.confirm_password').val()) {
error.push("Your new password and confirm password fields do not match.");
};
if(error.length) {
$('#errors').html( error.join("<br/>").show();
} else {
$('#errors').hide();
}
}
答案 1 :(得分:1)
尝试error.join('')
而不是迭代和更新元素
$('.change_password_button').click(function () {
var error = [];
if (!$('.password').val()) {
error.push("Current password field is empty.");
};
if (!$('.new_password').val()) {
error.push("New password field is empty.");
};
if (!$('.confirm_password').val()) {
error.push("Confirm password field is empty.");
};
if ($('.new_password').val() != $('.confirm_password').val()) {
error.push("Your new password and confirm password fields do not match.");
};
$('#errors').show();
$('#errors').html(error.join(''));
});
如果你想使用循环,那么附加html而不是覆盖它
var $errors = $('#errors').empty()
for (var i = 0; i < error.length; i = i + 1) {
$errors.append(error[i]);
}
$errors.show();
答案 2 :(得分:0)
不是每次都覆盖HTML,而是开始追加:
var current = $('#errors').html();
$('#errors').html( current + " " + error[ i ] );
添加ul
个错误可能更合适,但这可以帮助您入门。
答案 3 :(得分:0)
要回答这个问题:您为每个错误覆盖#errors
元素的HTML,因此它最终只显示最后一个错误。您需要将每条错误消息附加到上一条错误消息。
你可以像tymeJV建议的那样做,但这需要在每次循环运行时获取该div的HTML。 jQuery已经提供了开箱即用的附加功能,为什么不使用它呢? jQuery团队付出了很多努力。
...
$('#errors').show(); // Notice I moved this statement. Once it is shown, you do not need to show it again.
for (var i = 0; i < error.length; i = i + 1) {
$('#errors').append(error[i]); // .append() instead of .html().
}
...
答案 4 :(得分:0)