尝试从目标事件中获取数据时在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; 

FirefoxChrome这样的“普通”浏览Chrome可以Chrome获得价值,而且一切都很好; 但IE8没有发生任何事情,所以我假设它无法获取数据。

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

 $('.shipping_status').click(function(event) { event.preventDefault(); // Update Shipping Status updateShippingStatus(event); }); 

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

     

有没有办法让我可以使用IE8? …另外,我没有IE9+来测试 – 有没有人知道它是否适用于> IE8?

我还用jQuery标记了这个,如果我们有另外的方法来获取这个数据与jQuery也可以使用IE8。

看起来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文档 :

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

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

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

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