У объекта нет метода 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 ответа
Оказывается, проблема была мириадом проблемы, которая усугублялась ошибкой, которую я видел. Пара вещей, которые происходили:
- Плагин валидатора оборачивал объект jQuery в свою собственную структуру (отсюда и проблема charAt).
- После того, как я это исправил, я также узнал, что некоторый доморощенный код также стирает и переписывает данные в поле, чтобы обеспечить форматирование (что и делает autoNumeric), поэтому autoNumeric будет разорваться, потому что получит нулевое значение и попытается отформатировать Это.
Было еще какое-то случайное сумасшествие, которое тоже нужно было убрать. Итак... проблема решена! Еще предстоит поработать, но, по крайней мере, это препятствие прошло. Спасибо всем за вашу помощь.
Ошибки как
нет метода XXXXX в объекте
создаются потому, что вы пытаетесь вызвать obj.XXXX(), а obj не имеет требуемого типа, в вашем конкретном случае - строку.
Вы пробовали в другом браузере, потому что старше или IE может быть немного хлопотно. Я бы порекомендовал использовать инструменты разработчика Chro me с вашим унаследованным приложением, чтобы проверить, не конфликтует ли что-то еще или не выдает ошибку
Я держу пари, что вы используете вторую библиотеку, которая мешает работе с jQuery. Это, вероятно, переопределено $
со своей собственной функцией.
Попробуйте использовать jQuery
вместо $
:
jQuery(function () {
jQuery('.money').autoNumeric('init', {
aSign: '$',
vMin: '-999999999.99',
nBracket: '(,)'
});
});