0

我正在编写自己的表单验证插件。我正在处理一个页面上的多个表单。当表单提交时,它被验证。我遇到的问题是,在插件中我可以浏览表单的元素,但在 .submit 中我只能访问发送给 j!uery 的集合的最后一个表单。我的 html 是 2 种形式。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;
    })
    });
4

2 回答 2

2
form=this;

您忘记声明您的 form var,所以它是一个意外的全局变量,并没有像您预期的那样在闭包中捕获。

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

(在您的代码中使用lint工具,或支持 ECMAScript Fith Edition 严格模式的浏览器,以检测意外的全局变量。)

于 2011-10-17T00:40:25.127 回答
0

我觉得你自己把这件事弄得太复杂了。像这样简单的事情会起作用吗?

$forms = $( 'form' );

$forms.submit(
    $( this ).find( '[' + o.attr + ']' ).each( function(){
        var val = this.value;
        alert( this.getAttribute( 'name' ) );
    });
    return false;
);
于 2011-10-17T01:05:14.093 回答