对象不支持属性或方法’valid’

我的代码抛出以下错误:

对象不支持属性或方法’valid’。

这是因为当前表单没有validation。 那没问题。 我想要的是提前检查我是否可以将该方法应用于当前表单以避免恼人的JavaScript错误。

这就是我想要的。 例如if(form.isValidatable()) form.valid()

代码没有任何问题。 我只需要知道调用方法或属性是否会抛出exception。

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

更新:我是jquery的新手,谢谢你的帮助!!!!! 我想要做的是在提交之前和validation之后禁用所有输入。 我没有设法调用submitHandler,而且很难理解为什么。 这就是我正在做这个解决方案的原因。 看我的代码。 我怎样才能改善这个?

我想将它应用于我的解决方案中的所有forms….

 $(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({ submitHandler: function () { onFormIsValid($(this)); } }); form.bind('invalid-form.validate', function() { onFormIsInvalid($(this)); }); 

你的代码:

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

这似乎是一种非常迂回的方式,是错误的方法。 该插件会自动捕获点击并阻止提交,因此您的自定义submit()处理程序可能会发生冲突。

您可以使用内置的submitHandlerinvalidHandler回调函数……然后您不必担心如何调用.valid() ,因为submitHandler仅在有效时触发,而invalidHandler仅在无效时触发。

演示1: http : //jsfiddle.net/9obe1b35/1/

如果你使用ASP内置的Unobtrusive Validation helper插件,那么自动构造.validate()方法,你不能把这些回调函数放在里面。 相反,您可以将自定义的submitHandlerinvalidHandler函数放入jQuery.validator.setDefaults()方法中 。

演示2(不显眼): http : //jsfiddle.net/9obe1b35/2/