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

时间:2009-09-17 15:12:03

标签: javascript jquery

我在使用jquery提交表单时遇到了一些问题。我过去曾经提交过很多表单,但我只是在想,如何使用事件处理程序.submit()来提交表单,而不是表单ID中的元素。问题是我似乎无法用$(this)链接元素(可能使用.children()但我只想通过输入字段使用.each())。

以下是代码段:

$('.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”。

你可以看到我试图管理的两行被注释掉的地方。未注释掉的行也不起作用。我知道如何解决这个问题,例如将表单选择器名称传递给lambda函数,但我只是在考虑是否有更“干净”的方法来执行此操作?

提前致谢。 Kristinn。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

然而,这不起作用:

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

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

顺便说一句:使用JS调试器,例如Firebug,最好找出原因不起作用的原因。