对象不支持属性或方法“有效”

Posted

技术标签:

【中文标题】对象不支持属性或方法“有效”【英文标题】:Object doesn't support property or method 'valid' 【发布时间】:2017-04-15 09:59:44 【问题描述】:

我的代码抛出以下错误:

对象不支持“有效”属性或方法。

这是因为当前表单没有验证。那没问题。我想要的只是提前检查我是否可以将方法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));
  );

【问题讨论】:

if (!$.validator) return; ? @StephenMuecke, if (!$.validator) 只会告诉你插件已加载,对吧?我认为 OP 想知道是否已使用 .validate() 初始化某个特定表单以进行验证。 @Sparky,这就是 ? 的原因 :) - 不知道我理解 OP 想要什么 @StephenMuecke,是的,他的要求似乎是一种非常迂回的做事方式。 引用 OP:“我要做的是在提交之前和验证之后禁用所有输入。” ~ 使用submitHandler 【参考方案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/

【讨论】:

以上是关于对象不支持属性或方法“有效”的主要内容,如果未能解决你的问题,请参考以下文章

使用JS出现对象不支持此属性或方法

jquery 对象不支持on属性或方法

IE浏览器运行脚本显示“对象不支持此属性或方法”

js调试,对象不支持此属性或方法

IE 11 - 无法解决“对象不支持属性或方法'charCodeAt'”或“对象不支持属性或方法'readAsBinaryString'”

js错误提示:对象不支持此属性或方法。