使用 .submit() 事件处理程序通过 JQuery 循环表单字段

Posted

技术标签:

【中文标题】使用 .submit() 事件处理程序通过 JQuery 循环表单字段【英文标题】:Loop through form fields with JQuery using .submit() event handler 【发布时间】:2010-11-29 04:43:37 【问题描述】:

我在使用 jquery 提交表单时遇到了一点问题。我过去已经提交了很多表格,但我只是在思考,我如何使用事件处理程序.submit()来提交表单和它的元素,而不会调用表单ID。问题是,我似乎无法用$(这)(这是可能的.Children(),但我只想通过输入字段使用。

这是一个代码sn-p:

$('.editTimeLink').click(function () 
    var id = $(this).attr('rel');
    $.get('<?php echo $config["httpRoot"]; ?>/ajax.php?ajax=1&sec=time&a=edit&id=' + id, , function (data) 
        if (data.returnCode == 1) 
            $('#timeBox_' + id).html(data.data);
            $('#timeBox_' + id + ' form').bind('submit', function () 
                //$(this).$(':input').each(function () 
                //$(this).(':input').each(function () 
                $(this).each(':input', function () 
                    alert("adsf");
                );

                return false;
            );
         else if (data.returnCode == 0) 
            alert(data.data);
        
    , 'json');

    return false;
);

如您所见,我正在尝试以“this”形式提醒每个输入元素的字符串“asdf”。

您可以看到 2 行注释掉了我一直在尝试管理的内容。未注释掉的行也不起作用。我知道我如何解决这个问题,例如将表单选择器名称传递给lambda函数,但我只是在思考那里做到这一点?

提前致谢。 克里斯汀。

【问题讨论】:

【参考方案1】:

.children() 选择直接子级,因此如果您的表单中有表格或其他标记,您将需要使用 .find()

$(this).find(':input').each(function(i)
    console.log($(this).val()); //$(this) now contains the current form field in the loop
);

【讨论】:

【参考方案2】:

为什么不能使用children()?你仍然可以使用each()

$(this).children(':input').each(...);

但是,这不起作用:

$(this).each(':input', function () 
    alert("test");
);

因为each() 只接受一个参数,即回调 (doc here)。

顺便说一句:使用 JS 调试器,例如,Firebug,是找出为什么不工作的好主意。

【讨论】:

感谢您的回答。是的,我确实知道这一点,但很高兴能把这一切都解决掉。非常感谢。

以上是关于使用 .submit() 事件处理程序通过 JQuery 循环表单字段的主要内容,如果未能解决你的问题,请参考以下文章

form 表单处理

事件处理

避免多次提交

未捕获的 TypeError:document.getElementById(...).submit 不是 HTMLDocument.<anonymous> 的函数 [重复]

jquery使用案例

JavaScript和Ajax部分