我正在编写自己的表单验证插件。我正在制作一个页面上的多个形式的工作。提交表单时,将对其进行验证。我遇到的问题是,在插件中,我可以查看表单的元素,但在.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;
);