2016-11-30 107 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()处理程序可能会发生冲突。

您可以使用内置的submitHandlerinvalidHandler回调函数...那么你就不需要担心如何调用.valid(),因为只有submitHandler火灾时,有效和invalidHandler只有当火灾无效。

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

如果你使用内置到ASP不显眼的验证助手插件,然后将自动构造.validate()方法,你不能把这些内部的回调函数。相反,您可以将自定义submitHandlerinvalidHandler函数放入the jQuery.validator.setDefaults() method

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

相关问题