2010-09-09 116 views
0

我有一个城市的SVG地图,当点击时,在我的窗体中创建一个div中的隐藏元素。jQuery验证:在提交之前删除验证后的元素?

我正在使用jQuery Validation Plugin来验证我的表单。

为了确保用户点击了地图的一个区域,我想在隐藏元素的正常隐藏区域内创建一个虚拟隐藏元素,并在其上放置验证规则。我编写了自己的验证规则来检查隐藏元素的数量(表明用户已经在地图上的某处点击了)。这条规则是这样的:

$.validator.methods.zones = function (value, element, param) { 
    return ($('#search_form #zone-selectors input').length > 1); // 1 instead of 0 to account for the dummy element 
}; 

<div id="zone-selectors"> 
    <input type="hidden" name="dummy"> 
</div> 

但是,我不能允许该虚拟元素与表单的其余部分一起提交;我需要在表单被验证之后但在表单提交之前删除它。当然,我想用submitHandler选项validate()

// ... 
submitHandler: function(form) { 
    $(form).find('input[name=dummy]').remove(); 
    $(form).submit(); 
}, 
// ... 

...但是这似乎产生了一个无限循环,和我的浏览器超时的脚本。我究竟做错了什么?

回答

1

submitHandler需要一个调整,像这样:

submitHandler: function(form) { 
    $(form).find('input[name=dummy]').remove(); 
    form.submit(); 
} 

调用了jQuery .submit()再次触发导致验证,并无限循环......你想在这里调用本地.submit()功能。

+0

现在表格完全不提交...?但隐藏的元素被删除,所以我知道'submitHandler'正在被调用。 – neezer 2010-09-09 15:12:08

+0

@neezer - 表单是否有动作?或者你想通过ajax提交? – 2010-09-09 15:16:10

+0

@nick它有一个动作。我想要一个正常的提交,而不是一个Ajax提交。 – neezer 2010-09-09 15:34:37

0

这似乎适用于我,当上面的答案没有。也许与jQuery和jQuery验证版本有关。

submitHandler: function(form) { 
    $('input[name=dummy]', form).remove(); 
    form.submit(); 
}