尝试从目标事件中获取数据时在IE8中遇到问题

时间:2014-04-12 18:29:50

标签: javascript jquery javascript-events internet-explorer-8 html5-data

我有这样的代码..

// 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;
像<{1}}和Firefox这样的“普通”浏览器可以毫无问题地获取值,而且一切都很有效;但是Chrome没有发生任何事情,所以我假设它无法获取数据。

IE8参数通过以下代码传递给此函数:

event

..然后在点击其中一个示例元素时依次获取它:

$('.shipping_status').click(function(event) {

    event.preventDefault();

    // Update Shipping Status
    updateShippingStatus(event);

});

有没有办法可以让它与IE8一起使用? ...另外,我没有<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> 来测试 - 有没有人知道它是否适用于&gt; IE8?

我还用IE9+标记了这一点,如果有替代方法可以使用jQuery获取此数据,也可以使用IE8。

3 个答案:

答案 0 :(得分:4)

看起来IE刚开始支持IE11中的dataset属性: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');

如果HTML元素上的属性不会更改,则仅使用data()。来自jquery documentation

  

数据属性第一次被拉入数据属性   访问,然后不再访问或变异(所有数据值   然后在内部存储在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');

答案 1 :(得分:1)

你不能在IE8中使用event.preventDefault(),但你应该使用event.returnValue。

解决方案是:(event.preventDefault) ? event.preventDefault() : event.returnValue = false;

答案 2 :(得分:0)

在点击事件中使用var item_id = $(this).attr(“data-item”)等