Возникли проблемы в 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") и т. д. внутри события клика

Другие вопросы по тегам