问题描述
|
自定义函数formvalidate应该在其他版本之后运行,但不会运行。如何触发它运行?
我想在这里完成的工作是检查表单的文本字段。如果少于3个字符,则会向用户显示一些文本。如果输入大于3,则提交表单。
-我在想错路,效果更好。
$(\'#submit\').click(formdvalidate);
功能
function formdvalidate(){
$(\".form-sel\").each(function(){
var n = $(this).closest(\'.contain-form\').find(\'.custom:first\').val().length;
if ($(\'option:selected\',this).val() === \'custom\' && n < 3) {
$(this).closest(\'.contain-form\').find(\'.alert-short:first\').show();
}else{
$(\'#poll\').submit();
}
});
}
解决方法
通过
.click()
分配为点击处理程序的函数将jQuery事件对象作为其第一个参数-您将该参数命名为与函数相同的参数
formdvalidate === true
永远不会取值为true,因为formdvalidate
是全局范围内的函数,而item5ѭ范围内的jQuery事件对象则按照第1项
在formdvalidate
函数中,返回值位于.each()
函数内部,因此formdvalidate
从不实际返回任何内容。
我不确定您真正想要的是什么,或页面的外观如何,但是根据您对Slava Yanson的评论,我对您的最佳猜测是以下(尽管我仍然不确定某些事情...)
$( \'#submit\' ).click( function( e )
{
if( formdvalidate() === true)
{
$( \'#poll\' ).submit();
}
e.preventDefault();
} );
function formdvalidate()
{
var returnValue;
$( \'.form-sel\' ).each( function()
{
var $containForm = $( this ).closest( \'.contain-form\' ),$alertShortFirst = $containForm.find( \'.alert-short:first\' ),n = $containForm.find( \'.custom:first\' ).val().length;
if( $( \'option:selected\',this ).val() === \'custom\' && n < 3 )
{
$alertShortFirst.show();
returnValue = false;
}
else
{
$alertShortFirst.hide();
returnValue = true;
}
} );
return returnValue;
}
, formdvalidate
参数隐藏formdvalidate
功能。
使用更好的名字。
, 尝试
$(\'#submit\').click(function() {
if (formdvalidate() === true) {
$(\'#poll\').submit();
} else {
formdvalidate();
}
});
我不知道您的逻辑是否会完成您要尝试的工作。
, 在代码的第2行上,您正在将函数的实例与布尔值进行比较。那不会验证。您能否提供有关您要完成的目标的更多信息?
, 您的参数\“ formvalidate \”掩盖了您的\“ formvalidate \”函数。只需将您的参数重命名为如下所示:
$(\'#submit\').click(function(do_validate) {
if (do_validate === true) {
$(\'#poll\').submit();
} else {
formdvalidate();
}
});