我正在编写自己的表单验证插件。我正在使用页面上的多个表单。提交表单时,将对其进行验证。我遇到的问题是,在插件中我可以通过表单的元素,但在.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;
})
});
答案 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;
);