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

时间:2016-11-30 22:14:00

标签: jquery asp.net-mvc jquery-validate

我的代码抛出以下错误:

  

Object不支持属性或方法'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({
		submitHandler: function () {
			onFormIsValid($(this));
		}
	});

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

1 个答案:

答案 0 :(得分:1)

您的代码:

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函数放入the jQuery.validator.setDefaults() method

演示2(不引人注意):http://jsfiddle.net/9obe1b35/2/