$ .each()函数jQuery对象

时间:2014-01-28 20:44:30

标签: javascript jquery

我有一个表单,我正在尝试通过迭代元素并做任何需要完成的事情来为它构建自定义验证。

这是我到目前为止的js代码

$('#createClient').click(function (event) {
    var formData = {
        'clientbrandname': $("#createClientBrand").val(),
        'surveyReferral': $("#createSurveyReferral").val(),
        'GuestReferral': $("#createGuestReferral").val(),
        'email': $("#createInviteEmail").val(),
        'phone': $("#createPhoneNumber").val(),
        'xampAccNumber': $('#createUserLimit').val(),
        'logo': $('#createClientLogo').val(),
        'Template': $('#createRefPage').val(),
        'xampClient': $('#createAmplifierClient').val(),
        'xampActive': $('#createAmpMembership').val(),
        'sReferralID': $('#sReferralID').val(),
        'gReferralID': $('#gReferralID').val()
    };

    $(formData).each(function () {
        alert($(this).val());
    });

});

使用此代码我遇到了一个错误(i.nodeName is undefined)我怀疑它来自我尝试使用的部分$(this).val()

任何人都可以为此问题提出解决方案吗?

4 个答案:

答案 0 :(得分:3)

您正在迭代一个对象。因此,您需要在函数中调用名称值对。

  

$ .each()函数与$(selector).each()不同,即   用于独占迭代jQuery对象。 $ .each()   函数可用于迭代任何集合,无论它是否为   对象或数组。

JsFiddle

  $.each( formData, function( name, value ) {
        alert(name); //Alerts clientbrandname
        alert(value); //Alerts the value from "$("#createClientBrand").val()"
  });

答案 1 :(得分:2)

你真正想要的是:

$.each(formData, function(key, value) {
  // ...
});

$中的函数$(...)需要node或一组节点。然后它返回的对象有方法#each,它迭代节点。

现在有一个通用迭代器 - 上面提到的方法使用 - 即$.each。这个函数需要任何类似数组的对象。

为此,JavaScript中的{}对象的行为类似于数组。

现在我想知道,你考虑过使用serializeArray吗?

答案 2 :(得分:2)

参考位于HEREjQuery个文档,其中说明了

  

通用迭代器函数,可用于无缝迭代   对象和数组。数组和数组类似的对象   重复长度属性(例如函数的参数对象)   按数字索引,从0到长度-1。其他对象通过迭代   他们的命名属性。

您尝试在associative array上使用此功能,但无法通过数字索引进行迭代。

以下内容来自上述jQuery文档页面。

var obj = { one: 1, two: 2, three: 3, four: 4, five: 5 };
$.each( obj, function( i, val ) {
  $( "#" + i ).append( document.createTextNode( " - " + val ) );
});

答案 3 :(得分:2)

当您将JavaScript对象传递给jQuery构造函数($(...))时,您正在创建一个jQuery对象实例。此实例具有length属性,该对象使对象类似于

根据$.each的jQuery文档,

  

具有长度属性的数组和类数组对象(例如函数的参数对象)通过数字索引进行迭代,从0到长度为1。

此解决方案不适用于您,因为您没有数字索引。

相反,您需要使用$.each函数的另一种形式,如下所示:

//Just a generic representation of your JavaScript object.
var obj = {
    myKey: 'myValue'
};

$.each(obj, function (key, value) {
    console.log(key); //Outputs 'myKey'
    console.log(value); //Outputs 'myValue'
});

这里,obj在迭代之前还没有变成jQuery对象。它没有length属性,因此不会被视为数组。现在,属性名称将作为第一个参数发送到回调函数,属性的值将作为第二个参数发送。