Uncaught TypeError: Cannot read property 'indexOf' of undefined, with proengsoft / laravel-jsvalidation
Uncaught TypeError: Cannot read property 'indexOf' of undefined, with proengsoft / laravel-jsvalidation
我正在使用 proengsoft/laravel-jsvalidation 将 laravel 验证请求转换为 jquery 验证。但是我收到了这个错误。
Uncaught TypeError: Cannot read property 'indexOf' of undefined. Exception occurred when checking element , check the 'laravelValidation' method.
at Array.<anonymous> (jsvalidation.js:148)
at Function.each (jquery.min.js:2)
at $.validator.<anonymous> (jsvalidation.js:146)
at $.validator.check (jquery.validate.js:798)
at $.validator.checkForm (jquery.validate.js:475)
at $.validator.form (jquery.validate.js:462)
at n.fn.init.valid (jquery.validate.js:127)
at HTMLButtonElement.<anonymous> (wizard?account=20:1471)
at HTMLButtonElement.dispatch (jquery.min.js:3)
at HTMLButtonElement.r.handle (jquery.min.js:3)
我正在使用,
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script type="text/javascript" src="{{ asset('vendor/jsvalidation/js/jsvalidation.js')}}"></script>
{!! JsValidator::formRequest('App\Http\Requests\MyFormRequest') !!}
这是错误行,
var isArrayRule = param[4].indexOf('[') !== -1;
完整方法,
$.validator.addMethod("laravelValidation", function (value, element, params) {
var rules = [],
arrayRules = [];
$.each(params, function (i, param) {
// put Implicit rules in front
var isArrayRule = param[4].indexOf('[') !== -1;
if (param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1) {
isArrayRule ? arrayRules.unshift(param) : rules.unshift(param);
} else {
isArrayRule ? arrayRules.push(param) : rules.push(param);
}
});
// Validate normal rules.
var localRulesResult = validateLocalRules(this, [value], element, rules);
// Validate items of the array using array rules.
var arrayValue = ! Array.isArray(value) ? [value] : value;
var arrayRulesResult = validateLocalRules(this, arrayValue, element, arrayRules);
return localRulesResult && arrayRulesResult;
}, '');
这叫做验证函数,
rules: {"child_full_name":{"laravelValidation":[["Required",[],"This field is required",true]]}}
我不知道这是怎么发生的。任何人都可以提供任何线索来调试这个吗?
经过多次尝试后发现 proengsoft / laravel-jsvalidation 包已经用 composer 更新了。 Laravel 版本应与 laravel-jsvalidation 包版本匹配。
可以找到可用的版本和 laraval 矩阵 here.
在我的例子中,我必须添加 '~3.0'
"proengsoft/laravel-jsvalidation": "~3.0",
而不是在文档中告知 '^3.0'。 (我的 laravel 是 5.8,最终插件更新到版本 4 并停止)
保留此答案,因为如果有人遇到相同的错误,该插件非常有用。
(如果您发现错误,只需更改 composer.json 和 运行 composer install 命令中的行)
我正在使用 proengsoft/laravel-jsvalidation 将 laravel 验证请求转换为 jquery 验证。但是我收到了这个错误。
Uncaught TypeError: Cannot read property 'indexOf' of undefined. Exception occurred when checking element , check the 'laravelValidation' method.
at Array.<anonymous> (jsvalidation.js:148)
at Function.each (jquery.min.js:2)
at $.validator.<anonymous> (jsvalidation.js:146)
at $.validator.check (jquery.validate.js:798)
at $.validator.checkForm (jquery.validate.js:475)
at $.validator.form (jquery.validate.js:462)
at n.fn.init.valid (jquery.validate.js:127)
at HTMLButtonElement.<anonymous> (wizard?account=20:1471)
at HTMLButtonElement.dispatch (jquery.min.js:3)
at HTMLButtonElement.r.handle (jquery.min.js:3)
我正在使用,
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script type="text/javascript" src="{{ asset('vendor/jsvalidation/js/jsvalidation.js')}}"></script>
{!! JsValidator::formRequest('App\Http\Requests\MyFormRequest') !!}
这是错误行,
var isArrayRule = param[4].indexOf('[') !== -1;
完整方法,
$.validator.addMethod("laravelValidation", function (value, element, params) {
var rules = [],
arrayRules = [];
$.each(params, function (i, param) {
// put Implicit rules in front
var isArrayRule = param[4].indexOf('[') !== -1;
if (param[3] || laravelValidation.implicitRules.indexOf(param[0]) !== -1) {
isArrayRule ? arrayRules.unshift(param) : rules.unshift(param);
} else {
isArrayRule ? arrayRules.push(param) : rules.push(param);
}
});
// Validate normal rules.
var localRulesResult = validateLocalRules(this, [value], element, rules);
// Validate items of the array using array rules.
var arrayValue = ! Array.isArray(value) ? [value] : value;
var arrayRulesResult = validateLocalRules(this, arrayValue, element, arrayRules);
return localRulesResult && arrayRulesResult;
}, '');
这叫做验证函数,
rules: {"child_full_name":{"laravelValidation":[["Required",[],"This field is required",true]]}}
我不知道这是怎么发生的。任何人都可以提供任何线索来调试这个吗?
经过多次尝试后发现 proengsoft / laravel-jsvalidation 包已经用 composer 更新了。 Laravel 版本应与 laravel-jsvalidation 包版本匹配。 可以找到可用的版本和 laraval 矩阵 here.
在我的例子中,我必须添加 '~3.0'
"proengsoft/laravel-jsvalidation": "~3.0",
而不是在文档中告知 '^3.0'。 (我的 laravel 是 5.8,最终插件更新到版本 4 并停止) 保留此答案,因为如果有人遇到相同的错误,该插件非常有用。
(如果您发现错误,只需更改 composer.json 和 运行 composer install 命令中的行)