javascript 尝试从目标事件获取数据时,IE8中出现问题

pbgvytdp  于 2023-03-11  发布在  Java
关注(0)|答案(3)|浏览(110)

我有这样的代码..

// 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这样的“普通”浏览器可以毫无问题地获得这些值,而且一切都很好;但是,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+来测试-有人知道它在IE9+下是否工作吗?
我还用jQuery对此进行了标记,如果有一种替代方法可以用jQuery获得这些数据,并且这种方法也可以在IE8中使用。

nqwrtyyt

nqwrtyyt1#

看起来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()
data属性在第一次访问data属性时被拉入,然后不再被访问或改变(所有数据值随后都存储在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');
m2xkgtsf

m2xkgtsf2#

您不能在IE8中使用event.preventDefault(),但应该使用event.returnValue。
解决办法是:(event.preventDefault) ? event.preventDefault() : event.returnValue = false;

sulc1iza

sulc1iza3#

使用

var item_id =  $(this).attr("data-item")

点击事件内部等

相关问题