表单插件与多个表单|提交返回最后一个表单



我正在编写自己的表单验证插件。我正在制作一个页面上的多个形式的工作。提交表单时,将对其进行验证。我遇到的问题是,在插件中,我可以查看表单的元素,但在.submit中,我只能访问发送到jquery的集合的最后一个形式。我的HTML是两种形式。其中一个的输入名为num,另一个的输入名为alpha。它们都有自己的提交按钮。下面是jQuery插件的主要部分。对于插件在我只是发送它的形式。.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;
    })
    });
form=this;

您忘记声明表单var,因此它是一个意外的全局变量,而不是像您期望的那样在闭包中捕获。

因此,到调用submit函数时,form将始终保存this的最后一个值,无论提交哪种形式。

(在代码中使用lint工具,或者使用支持ECMAScript第五版严格模式的浏览器,来检测意外的全局变量。)

我觉得你把事情搞得太复杂了。这么简单的东西能起作用吗?

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

最新更新