这是我第一次尝试使用Javascript和jQuery进行数据验证。
我的错误数组已经填满,但我的问题是检查此数组是否为空。在我的情况下,它总是如此。即使数组为空,它也会始终提醒我“错误leeg”,并使用console.log(error)
进行检查:
<script type="text/javascript">
$(document).ready(function ()
{
var error = [];
$('#contactformulier').submit(function() {
if($('input#namet').val().length == 0) {
error['naam'] = 'Geen geldige naam ingevuld';
} else{
delete error['naam'];
}
if($('input#mailt').val().length == 0){
error['mail'] = 'Geen geldig e-mailadres ingevuld';
} else{
delete error['mail'];
}
if($('textarea#message').val().length == 0){
error['bericht'] = 'Geen geldig bericht ingevuld';
} else{
delete error['bericht'];
}
console.log(error);
if (error.length < 1) {
alert('errors leeg');
}
return false;
});
});
</script>
有什么建议吗?
答案 0 :(得分:6)
您只能对数组使用数字索引 - 至少如果您想使用数组#long等数组功能。
即。
var error = [];
error.push({ naam: "geen geldige naam" });
error.push({ mail: "geen geldige email" });
error.length == 2
答案 1 :(得分:2)
那是因为您要为数组添加属性而不是索引项。
您可以使用push()
将数据项添加到数组中:
error.push('Geen geldig bericht ingevuld');
在开始验证之前,清除阵列:
error.length = 0;
// start validation logic
答案 2 :(得分:0)
问题是你混淆了JavaScript类型。你认为是一个关联数组,在JavaScript中是一个带有属性和方法的对象。
所以你需要用:
来定义它var error = {};
如果可以使用arr.length > 0
检查简单的数组空,则可以使用jQuery方法$.isEmptyObject()
检查对象“空”(即缺少属性/方法):
if ( $.isEmptyObject(error) ) { ... }
参考: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects
答案 3 :(得分:0)
正如其他人所说,你不能将Object
的长度用作关联数组,.length
属性用于真正的数组。
你可以做什么,问一下有多少把钥匙:
var n = Object.keys(error).length;
答案 4 :(得分:-1)
<script type="text/javascript">
$(document).ready(function ()
{
var error;
var inError;
$('#contactformulier').submit(function() {
error = {};
inError = false;
if($('input#namet').val().length == 0) {
error['naam'] = 'Geen geldige naam ingevuld';
inError = true;
}
if($('input#mailt').val().length == 0){
error['mail'] = 'Geen geldig e-mailadres ingevuld';
inError = true;
}
if($('textarea#message').val().length == 0){
error['bericht'] = 'Geen geldig bericht ingevuld';
inError = true;
}
console.log(error);
if (inError) {
alert('errors leeg');
}
return false;
});
});
</script>