1

我正在尝试运行基础自定义表单 javascript 并不断遇到类型错误。错误是

表格无法初始化;TypeError 无法调用未定义的方法“indexOf”

我似乎无法弄清楚为什么会抛出这个错误。看起来这段代码是罪魁祸首

return arr.indexOf(item) === idx; around line 272

arr 对象在尝试运行此代码时为空。不确定这是否是由于脚本早期出现其他问题或其他原因造成的。任何帮助将不胜感激。

4

2 回答 2

0

仅供参考,我刚遇到这个。这是一个 Prototype.js 冲突。基本上,Prototype < 1.7.1 不做 ployfillArray.filter并且 Prototype 的方法版本似乎没有传递第三个参数,即arrthats undefined。所以你可以做几件事来解决:

  1. 将 Prototype 升级到 1.7.1 - 这就是我所做的,但我还没有在 Magento 上彻底测试过它,所以可能会出现问题......它是一个小版本,可能会出现什么问题?:-)
  2. 调整 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>');
    
  3. 您可以尝试覆盖 Prototype 版本Array.filter以将 Array 作为第三个参数传递。我不完全确定它在哪里,我寻找它,因为这是我第一次降低风险,但我最终决定升级。
于 2014-05-14T14:09:18.553 回答
0

arr 对象在尝试运行此代码时为空

这正是错误所抱怨的。

您需要修复代码以确保它arr不为空,或者在它为空时避免使用它。

于 2013-07-23T14:18:11.290 回答