2016-11-30 2 views
2

Мой код бросает следующее сообщение об ошибке:Объект не поддерживает свойство или метод «действителен»

Object doesn't support property or method 'valid'.

Это происходит потому, что текущая форма не имеет проверки. Все в порядке. Все, что я хочу, это проверить заранее, могу ли я применить метод valid к текущей форме, чтобы избежать раздражающей ошибки JavaScript.

Это все, что я хочу. Например. if(form.isValidatable()) form.valid()

В коде нет ничего плохого. Все, что мне нужно, это знать, будет ли вызов метода или свойства вызывать исключение.

form.submit(function() { 
    if ($(this).valid()) 
     onFormIsValid($(this)); 
    else 
     onFormIsInvalid($(this)); 
    }); 

ОБНОВЛЕНИЕ: Я новичок в jquery и благодарю вас за помощь !!!!! То, что я пытаюсь сделать, - отключить все входы непосредственно перед отправкой и после проверки. Мне не удается заставить submitHandler быть вызванным, и действительно сложно понять, почему. Вот почему я делаю это решение. См. Мой код. Как я могу улучшить это?

Я хочу, чтобы применить его ко всем формам в моем решении ....

$(document).ready(function() { 
    var form = $("form"); 

    form.bind('invalid-form.validate', function() { 
    onFormIsInvalid($(this)); 
    }); 

    form.submit(function() { 
    if ($(this).valid()) 
     onFormIsValid($(this)); 
    else 
     onFormIsInvalid($(this)); 
    }); 
}); 

function onFormIsValid(form) { 
    $("input", form).prop("readonly", "readonly"); 
    $("input[type=submit]", form).prop("disabled", true); 

    $("input[type=submit]", form).each(function() { 
    $(this).data("val", $(this).val()); 
    }); 

    $("input[type=submit]", form).val("Processing..."); 
} 

function onFormIsInvalid(form) { 
    $("input", form).prop("readonly", null); 
    $("input[type=submit]", form).prop("disabled", false); 

    $("input[type=submit]", form).each(function() { 
    $(this).val($(this).data("val")); 
    }); 
} 

Если с другой стороны, я делаю следующий за представить обработчик не дозвонились вообще. Нет ошибки, нет подсказки, ничего. Я помещаю точку останова, и это похоже на обработчик, которого нет.

form.validate({ 
 
\t \t submitHandler: function() { 
 
\t \t \t onFormIsValid($(this)); 
 
\t \t } 
 
\t }); 
 

 
    form.bind('invalid-form.validate', function() { 
 
    onFormIsInvalid($(this)); 
 
    });

+0

'если ($ валидатор!.) {Возвращение; } '? –

+0

@StephenMuecke, 'if (! $. Validator)' только скажет вам, что плагин загружен, правильно? Я думаю, что OP хочет знать, была ли инициализирована одна конкретная форма для проверки с помощью .validate() '. – Sparky

+0

@Sparky, Это причина '?' :) - не уверен, что я понимаю, что хочет OP –

ответ

0

Ваш код:

form.submit(function() { 
    if ($(this).valid()) 
     onFormIsValid($(this)); 
    else 
     onFormIsInvalid($(this)); 
}); 

Это кажется очень окольным путем и это неправильный подход. Плагин автоматически фиксирует щелчок и блокирует отправку, поэтому ваш пользовательский обработчик submit(), скорее всего, столкнется с конфликтом.

Вы можете использовать встроенный в submitHandler и invalidHandler функции обратного вызова ... тогда вам не нужно будет беспокоиться о том, как позвонить .valid(), поскольку submitHandler только пожары, когда действует и invalidHandler только срабатывает при недопустимых.

Demo 1: http://jsfiddle.net/9obe1b35/1/

Если вы используете вспомогательный плагин Ненавязчивый Validation встроенный в ASP, то метод .validate() строится автоматически, и вы не можете поместить эти функции обратного вызова внутри. Вместо этого вы можете поместить свои пользовательские функции submitHandler и invalidHandler в the jQuery.validator.setDefaults() method.

Demo 2 (Ненавязчивый): http://jsfiddle.net/9obe1b35/2/