Javascript 尝试从目标事件获取数据时IE8出现问题
我有这样的代码Javascript 尝试从目标事件获取数据时IE8出现问题,javascript,jquery,internet-explorer-8,jquery-events,html5-data,Javascript,Jquery,Internet Explorer 8,Jquery Events,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; 像Firefox和Chrome这样的“普通”浏览器获得的值没有问题,一切都很好;然而,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没有发生任何事情,因此我假设它无法获取数据
事件
参数通过以下代码传递给此函数:
$('.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一起使用。看起来IE刚刚开始支持IE11中的dataset
属性:
尝试只使用getAttribute()
:
如果您使用的是jQuery,则可以使用data()
方法简化此过程:
var $target = $(event.target);
var flag_status = $target.data('change');
var winner_id = $target.data('winner');
var item_id = $target.data('item');
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');
仅当HTML元素上的属性不会更改时才使用data()
。发件人:
数据属性在第一次创建数据属性时被拉入
已访问,然后不再访问或更改(所有数据值
然后存储在jQuery中)
如果需要重新读取更改的HTML属性,只需使用attr()
方法:
var $target = $(event.target);
var flag_status = $target.data('change');
var winner_id = $target.data('winner');
var item_id = $target.data('item');
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');
看起来IE刚刚开始支持IE11中的
dataset
属性:
尝试只使用getAttribute()
:
如果您使用的是jQuery,则可以使用data()
方法简化此过程:
var $target = $(event.target);
var flag_status = $target.data('change');
var winner_id = $target.data('winner');
var item_id = $target.data('item');
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');
仅当HTML元素上的属性不会更改时才使用data()
。发件人:
数据属性在第一次创建数据属性时被拉入
已访问,然后不再访问或更改(所有数据值
然后存储在jQuery中)
如果需要重新读取更改的HTML属性,只需使用attr()
方法:
var $target = $(event.target);
var flag_status = $target.data('change');
var winner_id = $target.data('winner');
var item_id = $target.data('item');
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代码>在IE8中不能使用event.preventDefault(),但应该使用event.returnValue
解决方案是:(event.preventDefault)?event.preventDefault():event.returnValue=false
使用var item_id=$(此).attr(“数据项”)等。在click事件中使用var item_id=$(此).attr(“数据项”)等。在click事件中,刚刚尝试了jQuery解决方案,但它仍然有效;如果数据在没有重新加载页面的情况下发生更改,它将无法返回新值-它仍然返回以前的值。jquerydata()
方法不能与HTML属性进行双向绑定。也就是说,我打赌它只是第一次读取属性,不会重新访问DOM。也许只需要使用attr
方法:$target.attr('data-change')
。我会更新答案。@SeanAdkinson——正确。data()
方法将在第一次调用时读取data-*
属性,但是没有双向绑定,因为data
方法可以处理更复杂的对象,而不仅仅是原语。谢谢@JeremyJStarcher,我在jquery文档中找到了解释并更新了答案。这对于更复杂的对象来说是有意义的;如果数据在没有重新加载页面的情况下发生更改,它将无法返回新值-它仍然返回以前的值。jquerydata()
方法不能与HTML属性进行双向绑定。也就是说,我打赌它只是第一次读取属性,不会重新访问DOM。也许只需要使用attr
方法:$target.attr('data-change')
。我会更新答案。@SeanAdkinson——正确。data()
方法将在第一次调用时读取data-*
属性,但是没有双向绑定,因为data
方法可以处理更复杂的对象,而不仅仅是原语。谢谢@JeremyJStarcher,我在jquery文档中找到了解释并更新了答案。这对于更复杂的对象是有意义的。