У объекта нет метода charAt в плагине jQuery

Я пытаюсь использовать плагин autoNumeric jQuery, который помогает конвертировать различные валюты в jQuery.

Сам плагин работает, когда я использую его в примере jsFiddle.

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

Однако, как только я интегрирую его в большой устаревший проект, я начинаю получать вышеуказанную ошибку в строке 194. Я знаю, почему я получаю ошибку - строка не передается в функцию absoluteBracket (negativeBracket(s, nBracket, oEvent) это подпись). Вместо этого это, кажется, объект jQuery - e.fn.init 1. Я запутался в том, как это может происходить. Я понимаю, что сообщество, возможно, не сможет дать прямой ответ, но я хотел бы (и приму в качестве ответа) указание в правильном направлении, поскольку ничто не прыгнуло на меня до сих пор.

Обновить

Итак, имейте некоторую дополнительную информацию, которая может помочь. Я до сих пор не могу понять, как это происходит (к сожалению, приведенные ниже ответы не помогли дать какую-либо дополнительную информацию). Когда я связываю в autoNumeric, я делаю это на любом текстовом поле с классом money. Это работает, как я печатаю в поле. Я вижу увидеть форматирование. Однако, когда я вкладываю в новое поле, поле, которое я только что закончил набирать, полностью очищается после нажатия на строку 152 в autoNumeric с той же самой точной ошибкой.

@ Carlos487 был прав в своем ответе, когда сказал, что у меня есть объект, который не является строкой. Вместо этого у меня есть объект, который, я считаю, является функцией. Вот что я вижу в инструментах отладчика Chrome:

e.fn.init[1]

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

Пункты со стрелками могут быть расширены. Я не знаю, дает ли это больше подсказок, но это, по крайней мере, немного другое.

3 ответа

Решение

Оказывается, проблема была мириадом проблемы, которая усугублялась ошибкой, которую я видел. Пара вещей, которые происходили:

  1. Плагин валидатора оборачивал объект jQuery в свою собственную структуру (отсюда и проблема charAt).
  2. После того, как я это исправил, я также узнал, что некоторый доморощенный код также стирает и переписывает данные в поле, чтобы обеспечить форматирование (что и делает autoNumeric), поэтому autoNumeric будет разорваться, потому что получит нулевое значение и попытается отформатировать Это.

Было еще какое-то случайное сумасшествие, которое тоже нужно было убрать. Итак... проблема решена! Еще предстоит поработать, но, по крайней мере, это препятствие прошло. Спасибо всем за вашу помощь.

Ошибки как

нет метода XXXXX в объекте

создаются потому, что вы пытаетесь вызвать obj.XXXX(), а obj не имеет требуемого типа, в вашем конкретном случае - строку.

Вы пробовали в другом браузере, потому что старше или IE может быть немного хлопотно. Я бы порекомендовал использовать инструменты разработчика Chro me с вашим унаследованным приложением, чтобы проверить, не конфликтует ли что-то еще или не выдает ошибку

Я держу пари, что вы используете вторую библиотеку, которая мешает работе с jQuery. Это, вероятно, переопределено $ со своей собственной функцией.

Попробуйте использовать jQuery вместо $:

jQuery(function () {
    jQuery('.money').autoNumeric('init', {
        aSign: '$',
        vMin: '-999999999.99',
        nBracket: '(,)'
    });
});
Другие вопросы по тегам