对象在jQuery插件中没有方法'charAt'

时间:2013-09-25 18:58:27

标签: javascript jquery jquery-plugins

我正在尝试使用autoNumeric jQuery plug-in来帮助转换jQuery中的各种货币。

当我在jsFiddle example中使用它时,插件本身就可以工作。

$(function () {
    $('.money').autoNumeric('init', {
        aSign: '$',
        vMin: '-999999999.99',
        nBracket: '(,)'
    });
});

但是,只要我将它集成到一个大型遗留项目中,我就会在第194行开始收到上述错误。我知道为什么我收到错误 - 字符串没有传递给negativeBracket函数({ {1}}是签名)。相反,它似乎是一个jQuery对象 - e.fn.init 1。我对这可能发生的方式感到困惑。我意识到社区可能无法给出直接的答案,但我希望(并且会接受作为答案)指向正确的方向,因为到目前为止没有任何东西跳出来。

更新

所以,请提供一些可能有帮助的其他信息。我仍然难以理解它是如何发生的(不幸的是,下面的答案无助于提供任何额外的见解)。当我在autoNumeric中链接时,我用类钱将其键入任何文本字段。 当我在框中输入时,它确实有效。我可以看到格式化。然而,当我选中一个新框时,刚刚完成输入的框在完成autoNumeric中的第152行并完全清除后会出现相同的错误。

当他说我有一个不是字符串的对象时,@ Carlos487的回答是正确的。相反,我有一个对象,我相信,它是一个函数。以下是我在Chrome调试工具中看到的内容:

negativeBracket(s, nBracket, oEvent)

“箭头”项目可以进一步扩展。我不知道这是否提供了更多线索,但它至少有点不同。

3 个答案:

答案 0 :(得分:0)

错误如

  

对象

中没有方法XXXXX

是因为您尝试调用 obj.XXXX()而obj不是所需的类型,在您的特定情况下是字符串

您是否尝试过其他浏览器,因为较旧或IE可能会有点麻烦。我建议您使用Chrome开发人员工具与遗留应用程序一起查看是否存在其他任何冲突或产生错误

答案 1 :(得分:0)

我会赌你正在使用第二个库干扰jQuery的钱。它可能已经用自己的函数覆盖了$

尝试使用jQuery代替$

jQuery(function () {
    jQuery('.money').autoNumeric('init', {
        aSign: '$',
        vMin: '-999999999.99',
        nBracket: '(,)'
    });
});

答案 2 :(得分:0)

事实证明,这个问题是我看到的错误中的无数问题。发生了一些事情:

  1. 验证器插件将jQuery对象包装在自己的结构中(因此是charAt问题)。
  2. 一旦我解决了这个问题,我还了解到一些本土代码也在擦除并重写数据到字段中以提供格式化(这也就是autoNumeric也在做什么),因此autoNumeric会爆炸,因为它会得到一个空值和试图格式化它。
  3. 还有一些其他需要清理的随机疯狂。所以......问题解决了!还有更多工作要做,但至少这个障碍已经过去了。谢谢大家的帮助。