jQuery:如果语句为 false,则'if'运行自定义函数



自定义函数formdvalidate应该在else之后运行,但它没有。如何触发它运行?我想在这里完成的是检查表单的文本字段。如果少于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();
        }
    });                 
}
  1. 通过.click()指定为点击处理程序的函数将jQuery事件对象作为其第一个参数——您将该参数命名为与函数相同的参数
  2. formdvalidate === true永远不会计算为true,因为formdvalidate是全局作用域中的函数,并且是click()作用域中根据项1的jQuery事件对象
  3. formdvalidate函数中,返回位于.each()函数内部,因此formdvalidate实际上从不返回任何内容

我不确定你到底在追求什么,也不确定你的页面是什么样子,但根据你对斯拉瓦·扬森的评论,我对你的最佳猜测如下(尽管仍有一些事情我不确定…)

$( '#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"正在隐藏您的"formvalidates"函数。只需将您的论点重命名为以下内容:

$('#submit').click(function(do_validate) {
 if (do_validate === true)  {
     $('#poll').submit();
        } else {        
             formdvalidate();
        }
});

最新更新