具有多种形式的表单插件|提交返回上一个表单

时间:2011-10-17 00:17:33

标签: javascript jquery jquery-plugins jquery-forms-plugin

我正在编写自己的表单验证插件。我正在使用页面上的多个表单。提交表单时,将对其进行验证。我遇到的问题是,在插件中我可以通过表单的元素,但在.submit中,我只能访问发送给j!uery的集合的最后一种形式。我的HTML是两种形式。 on有一个名为num的输入,另一个有一个名为alpha的输入。他们都有自己的提交按钮。下面是jQuery插件的主要部分。对于插件我只是发送它的形式。 o.attr存储具有验证规则的属性名称。

    var options =  $.extend(defaults, options);
    return this.each(function() 
    {
    form=this;
    var o = options;
    //this gets me both inputs on page load
    $('['+o.attr+']', form).each(function()
    {
        var val=$(this).val()
        alert($(this).attr('name'))
    })
    //on submit It will alert the last forms input regardless of what form i submited
    $(this).submit(function()
    {
        var o = options;
        $('['+o.attr+']', form).each(function()
        {
            var val=$(this).val()
            alert($(this).attr('name'))
        })
        return false;
    })
    });

2 个答案:

答案 0 :(得分:2)

form=this;

您忘记声明表单var,因此它是一个偶然的全局变量,并没有按预期在闭包中捕获。

因此,在调用submit函数时form始终保持this的最后一个值,无论提交的是哪种表单。

(在您的代码或支持ECMAScript Fith Edition Strict Mode的浏览器上使用lint工具来检测偶然的全局变量。)

答案 1 :(得分:0)

我觉得你让自己太复杂了。这项工作会简单吗?

$forms = $( 'form' );

$forms.submit(
    $( this ).find( '[' + o.attr + ']' ).each( function(){
        var val = this.value;
        alert( this.getAttribute( 'name' ) );
    });
    return false;
);