Возникли проблемы в IE8 при попытке получить данные из целевого события
У меня есть такой код, как этот..
// Get some data
var id = event.target.id;
var flag_status = event.target.dataset.change;
var winner_id = event.target.dataset.winner;
var item_id = event.target.dataset.item;
"Нормальные" браузеры, как Firefox
а также Chrome
получить значения без проблем и все отлично работает; Однако ничего не происходит с IE8
поэтому я предполагаю, что он не может получить данные.
event
Параметр передается этой функции через этот код:
$('.shipping_status').click(function(event) {
event.preventDefault();
// Update Shipping Status
updateShippingStatus(event);
});
..и затем, в свою очередь, получает его при нажатии на один из этих элементов примера:
<a title="Item Being Processed" class="shipping_status processing" data-item="102383" data-winner="172" data-change="0" id="processing_102383" href="#"></a>
<a title="Item Posted" class="shipping_status posted active" data-item="102383" data-winner="172" data-change="1" id="posted_102383" href="#"></a>
<a title="Problem With Item" class="shipping_status problem" data-item="102383" data-winner="172" data-change="3" id="problem_102383" href="#"></a>
<a title="Item Delayed" class="shipping_status delayed last" data-item="102383" data-winner="172" data-change="2" id="delayed_102383" href="#"></a>
Есть ли способ заставить это работать с IE8? ... кроме того, у меня нет IE9+
проверить - кто-нибудь знает, работает ли он в> IE8?
Я также отметил это jQuery
если есть альтернативный способ получить эти данные с помощью jQuery, который будет работать и с IE8.
3 ответа
Похоже, IE только начал поддерживать dataset
атрибут в IE11: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.dataset
Попробуйте просто использовать getAttribute()
:
var flag_status = event.target.getAttribute('data-change');
var winner_id = event.target.getAttribute('data-winner');
var item_id = event.target.getAttribute('data-item');
Если вы используете jQuery, это облегчает использование data()
метод:
var $target = $(event.target);
var flag_status = $target.data('change');
var winner_id = $target.data('winner');
var item_id = $target.data('item');
Использовать только data()
если атрибуты элемента HTML не изменятся. Из документации JQuery:
Атрибуты данных извлекаются при первом обращении к свойству данных, а затем к ним больше не обращаются и не изменяются (все значения данных затем сохраняются внутри в jQuery).
Если вам нужно перечитать изменяемые атрибуты HTML, просто используйте attr()
метод:
var $target = $(event.target);
var flag_status = $target.attr('data-change');
var winner_id = $target.attr('data-winner');
var item_id = $target.attr('data-item');
Вы не можете использовать event.preventDefault() в IE8, но вы должны использовать event.returnValue.
Решение будет: (event.preventDefault) ? event.preventDefault() : event.returnValue = false;
Используйте var item_id = $(this).attr("data-item") и т. д. внутри события клика