【问题标题】:Accessing a jQuery Object in another object访问另一个对象中的 jQuery 对象
【发布时间】:2013-05-02 15:21:16
【问题描述】:

我正在尝试访问 ajaxForm 成功回调中的表单元素。表单元素作为第 4 个元素传递(参见:http://malsup.com/jquery/form/#options-object -> 成功)。

所以如果我通过console.log(form) 对其进行测试,它就可以工作。我得到一个 jQuery 对象,可以通过form[0].访问表单

console.log 告诉我,[0] 下有更多元素,即表单的输入。我可以通过form[0][0] or form[0][1] 等方式访问它们。

但是我怎样才能一次获得所有子对象呢?

我的情况是,我不知道输入的数量,所以我需要通过foreach 之类的方式访问元素的所有输入。但是使用 form[0] 我只是获取表单的 DOM 元素。

这有点复杂,但我希望你能理解我的问题。

编辑: 这是我从 console.log(form) 得到的:

[form#doku_newrowJsonForm.doku_newrowJsonForm, context: form#doku_newrowJsonForm.doku_newrowJsonForm, jquery: "1.9.1", constructor: function, init: function, selector: ""…]
0: form#doku_newrowJsonForm.doku_newrowJsonForm
 0: input
 1: input#AdrowAdtableId
 2: input#AdrowCustomerId
 3: input#AdrowContent19.input-small
 4: input#AdrowContent20.input-small
 5: input#AdrowContent21.input-small
 6: input#AdrowContent22.input-small
 7: input#AdrowContent23.input-small
 8: input#AdrowContent24.input-small

form[0] 只给了我 DOM-Element 和 form[0].find(':input') 给了我 Uncaught TypeError: Object # has no method 'find' ...

编辑2 需要明确的是:我想获取例如 input#AdrowAdtableId。我可以通过表单[0][1] 访问它。但我不知道表格中输入的长度。它是动态的。因此,做类似 form[0].each() 之类的事情会很棒。但是 form[0] 给了我 DOM 元素而不是 jQuery 对象...

【问题讨论】:

  • 把问题弄清楚..详细说明..
  • 请发布表单的确切标记(至少在它的开头包括一两个输入),因为此时您的问题有点令人困惑。

标签: jquery ajaxform


【解决方案1】:

只需使用find()。如果您希望表单中的所有输入(并且表单本身可以作为form[0] 访问),只需执行以下操作:

$(form[0]).find(":input")

如果form已经是一个jQuery对象,那么下面的效果会更好:

form.eq(0).find(":input")

请注意,我使用 :input 伪类来获取所有类似输入的元素,而不仅仅是 <input> 的元素。

【讨论】:

  • 这似乎是一个很好的解决方案,但它不起作用。解释如下。
  • 我刚刚编辑了我的第一篇文章。抱歉耽搁了……我收到了一个未捕获的类型错误
  • 我的错,但是使用 console.log($(form[0]).find(':input') 我得到:[prevObject: e.fn.init[1], context: form #doku_newrowJsonForm.doku_newrowJsonForm,选择器:“:输入”,jquery:“1.9.1”,构造函数:函数...] 上下文:form#doku_newrowJsonForm.doku_newrowJsonForm 长度:0
【解决方案2】:

如果您使用的是 jQuery 表单并且您对发布的值感兴趣,您可以执行以下操作:

var form = $('form');
form.ajaxForm({
    beforeSubmit: function(arr, $form, options) {
        form.data('form-values', arr);
    },
    success: function() {
        console.log(form.data('form-values')); // logs the submitted values
    }
});

【讨论】:

    【解决方案3】:

    您可以使用.each() 访问表单上的所有输入

    $(form[0]).find(':input').each(function{){
        var myInputValue = $(this).val();
    });
    

    如果您需要了解具体的输入类型,请参阅:How to get input type using jquery?

    【讨论】:

    • 不幸的是 $(form[0]).find... 不起作用。 $(form[0]) 返回的结果与 form 本身完全相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2020-04-27
    • 1970-01-01
    • 2011-01-22
    相关资源
    最近更新 更多