1

我正在尝试使用autoNumeric jQuery 插件,它有助于在 jQuery 中转换各种货币。

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

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

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

更新

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

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

e.fn.init[1]

> 0: input#price.money required
> context: input#price.money required
 length: 1
 selector: ""
> __proto__: Object[0]

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

4

3 回答 3

0

我敢打赌,您正在使用第二个干扰 jQuery 的库。它可能已被$自己的功能覆盖。

尝试使用jQuery而不是$

jQuery(function () {
    jQuery('.money').autoNumeric('init', {
        aSign: '$',
        vMin: '-999999999.99',
        nBracket: '(,)'
    });
});
于 2013-09-26T03:54:19.827 回答
0

像这样的错误

对象中没有方法 XXXXX

产生是因为您试图调用obj.XXXX()并且 obj 不是所需的类型,在您的特定情况下是string

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

于 2013-09-25T21:30:26.490 回答
0

事实证明,这个问题是我看到的错误中复合的无数问题。发生了几件事:

  1. 验证器插件将 jQuery 对象包装在自己的结构中(因此出现了 charAt 问题)。
  2. 一旦我解决了这个问题,我还了解到一些本土代码也在擦除并重写数据到字段中以提供格式(这也是 autoNumeric 也在做的事情),所以 autoNumeric 会爆炸,因为它会得到一个空值并尝试格式化它。

还有一些其他随机的疯狂也需要清理。所以...问题解决了!还有更多工作要做,但至少这个障碍已经过去。感谢你的帮助。

于 2013-10-02T18:35:41.903 回答