我正在尝试运行基础自定义表单javascript并继续遇到类型错误。错误是
表格无法初始化; TypeError无法调用方法'indexOf' 未定义的“
我似乎无法弄清楚为什么会抛出这个错误。看起来这段代码是罪魁祸首
return arr.indexOf(item) === idx; around line 272
尝试运行此代码时,arr对象为null。不确定这是否是由于脚本中早先出现的其他错误或者是什么造成的。任何帮助将不胜感激。
答案 0 :(得分:0)
arr对象在尝试运行此代码时为null
这正是错误所抱怨的。
您需要修复代码以确保arr
不为null,或者在它为null时避免使用它。
答案 1 :(得分:0)
仅供参考,我刚刚遇到过这个问题。这是一个Prototype.js冲突。基本上,Prototype< 1.7.1并没有为Array.filter
执行ployfill而Prototype的方法版本似乎没有通过第三个参数,即arr
那个undefined
。所以你可以做一些事情来解决:
调整Foundation代码块,以便获得在var中编译的类的列表,然后您可以在回调中引用它来过滤:
// OLD
$customSelect = $('<div class="' + ['custom', 'dropdown', customSelectSize].concat(copyClasses).filter(function (item, idx, arr) {
if (item === '') return false;
return arr.indexOf(item) === idx;
}).join(' ') + '"><a href="#" class="selector"></a><ul /></div>');
//-----------------
// NEW
var classList = ['custom', 'dropdown', customSelectSize].concat(copyClasses);
$customSelect = $('<div class="' + classList.filter(function (item, idx, arr) {
if (item === '') return false;
arr = typeof arr === 'undefined' ? classList : arr;
return arr.indexOf(item) === idx;
}).join(' ') + '"><a href="#" class="selector"></a><ul /></div>');
Array.filter
的Prototype版本,以将Array作为第三个参数传递。我并不完全确定它的存在,我寻找它,因为这是我第一次尝试降低风险,但最终我决定升级。