JQuery: запустить пользовательскую функцию «если», если утверждение ложно - PullRequest
0 голосов
/ 14 июня 2011

Пользовательская функция formdvalidate должна запускаться после, но не работает. Как я могу запустить его? Здесь я хотел бы проверить текстовые поля формы. Если количество символов не превышает 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();
        }
    });                 
}

Ответы [ 5 ]

3 голосов
/ 14 июня 2011
  1. Функция, назначенная в качестве обработчика щелчка через .click(), принимает объект события jQuery в качестве первого параметра - вы назвали этот параметр таким же, как ваша функция
  2. formdvalidate === true никогда не будет оцениваться какЗначение true, поскольку formdvalidate является функцией в глобальной области видимости, а объект события jQuery в области действия click() соответствует элементу 1
  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;
}
1 голос
/ 14 июня 2011

Попробуйте

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

});

Я не знаю, удастся ли вашей логике выполнить то, что вы пытаетесь.

1 голос
/ 14 июня 2011

Параметр formdvalidate скрывает функцию formdvalidate.

Используйте лучшие имена.

0 голосов
/ 14 июня 2011

Ваш аргумент "formvalidate" скрывает вашу функцию "formvalidate". Просто переименуйте ваш аргумент во что-то вроде этого:

$('#submit').click(function(do_validate) {
 if (do_validate === true)  {
     $('#poll').submit();
        } else {        
             formdvalidate();
        }
});
0 голосов
/ 14 июня 2011

В строке 2 вашего кода вы сравниваете экземпляр вашей функции с логическим значением. Это не подтвердит. Можете ли вы предоставить больше информации о том, чего вы пытаетесь достичь?

...