Ваш код для получения значения из атрибута aria-pressed
работает нормально. Однако значение на самом деле является строкой, поэтому оно должно оцениваться по-другому. Также помните, что каждый вызов DOM должен выполняться после запуска события load
в документе, чтобы гарантировать, что все готово для запроса. В противном случае jQuery не сможет найти нужный узел:
$(function() {
$('.pkgSwitch').click(function(){
if($(this).attr('aria-pressed') === "true"){
console.log("true");
$('#packageSwitchValue').val(1);
}else{
console.log("false");
$('#packageSwitchValue').val(0);
}
});
});
Однако поведение data-toggle
, по-видимому, обновляет атрибуты узла после запуска события click
, что приводит к непредсказуемым результатам ( Иногда может быть истинным или ложным, потому что нет никакого порядка на слушателях, зарегистрированных на узле). Возможно, добавление некоторого исправления или просто setTimeout
может решить проблему. Кроме того, вы должны следить за active
изменениями класса вместо aria-pressed
, потому что это аргумент только для доступности.
const WAIT_MS = 50;
function onToggleUpdate($elem, cb) {
setTimeout(() => cb($elem.hasClass("active")), WAIT_MS);
}
function cb(val) {
console.log(!!val ? "true" : "false");
}
$(function() {
$('.pkgSwitch').click(function() {
onToggleUpdate($(this), cb);
});
});
Я прилагаю CodePen с работающей концепцией: https://codepen.io/geekzolanos-dev/pen/YzXpdzV