0

这是我第一次尝试使用 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>

有什么建议么?

4

5 回答 5

5

您只能对数组使用数字索引 - 至少在您想使用数组功能(例如 Array#length)时。

IE

var error = [];
error.push({ naam: "geen geldige naam" });
error.push({ mail: "geen geldige email" });
error.length == 2
于 2013-04-16T14:42:16.497 回答
1

那是因为您将属性添加到数组而不是索引项。

您可以使用以下方法将项目添加到数组中push()

error.push('Geen geldig bericht ingevuld');

在开始验证之前,清除数组:

error.length = 0;
// start validation logic
于 2013-04-16T14:41:33.223 回答
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

于 2013-04-16T14:43:06.403 回答
0
<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>
于 2013-04-16T14:57:25.367 回答
0

正如其他人所说,您不能将Object被用作关联数组的长度,该.length属性适用于真实数组。

但是,您可以做的是询问有多少键:

var n = Object.keys(error).length;
于 2013-04-16T15:01:10.103 回答