Как программно установить значение для автономного элемента?
Я использую (autonumeric@4.1.0) с приложением laravel 5.7/jquery 3.4.1, и мне нужно программно установить значение для автономного элемента при срабатывании события. Глядя на описание https://github.com/autoNumeric/autoNumeric
Я вижу пример с методом набора:
anElement.set(42.76);
У меня проблемы с этим были, как и в public / js / Backend / bookings-and-availability.js, который я прикрепляю к файлу лезвия, который у меня есть:
function bookingsAndAvailability(page, paramsArray) { // constructor of backend bookingsAndAvailability listing - set all from referring page and from server
// elements init
...
new AutoNumeric('#numeric_check_fees', {
currencySymbolPlacement: this_current_currency_position,
currencySymbol: this_current_currency_short,
maximumValue: '9999999999.99',
minimumValue: 0.00
});
const check_feesAutoNumeric = document.querySelector('#numeric_check_fees');
check_feesAutoNumeric.addEventListener('autoNumeric:rawValueModified', e => {
if (typeof e.detail.newRawValue != "undefined") {
$("#check_fees").val(e.detail.newRawValue)
}
});
...
// event handling:
bookingsAndAvailability.prototype.feeDictionaryItemSelect = function (selected_value) {
// anElement.set(42.76);
check_feesAutoNumeric = document.querySelector('#numeric_check_fees');
check_feesAutoNumeric.set(selected_value)
}
Но у меня ошибка:
bookings-and-availability.js?dt=1592282828:1708 Uncaught TypeError: check_feesAutoNumeric.set is not a function
at bookingsAndAvailability.feeDictionaryItemSelect (bookings-and-availability.js?dt=1592282828:1708)
at HTMLSelectElement.onchange (bookings-and-availability:991)
Какой правильный способ?
ИЗМЕНЕНО: я нашел возможное решение после установки значения для инициализации числового элемента еще раз, например:
$("#numeric_check_fees").val(selected_value)
new AutoNumeric('#numeric_check_fees', {
currencySymbolPlacement: this_current_currency_position,
currencySymbol: this_current_currency_short,
maximumValue: '9999999999.99',
minimumValue: 0.00
});
const check_feesAutoNumeric = document.querySelector('#numeric_check_fees');
check_feesAutoNumeric.addEventListener('autoNumeric:rawValueModified', e => {
if (typeof e.detail.newRawValue != "undefined") {
$("#check_fees").val(e.detail.newRawValue)
}
});
и он работает, но я получил предупреждение, что числовой элемент уже был инициализирован. Есть ли лучшее решение?
Благодарность!
1 ответ
Вы получаетеUncaught TypeError: check_feesAutoNumeric.set is not a function
ошибка, потому чтоcheck_feesAutoNumeric
не объект AutoNumeric, а простой элемент DOM, возвращаемый вашим вызовомdocument.querySelector('#numeric_check_fees')
.
Лучший способ использовать.set(42.76)
, будет сохранять ссылку на ваш объект AutoNumeric во время инициализации, например, делая это:
const anElement = new AutoNumeric('#numeric_check_fees', {
currencySymbolPlacement: this_current_currency_position,
currencySymbol: this_current_currency_short,
maximumValue: '9999999999.99',
minimumValue: 0.00
});
... затем используйте эту ссылку всякий раз, когда необходимо изменить значение элемента:
anElement.set(42.76);