IE11.0.26 mergeAttributes不支持的错误

时间:2016-01-10 19:59:30

标签: jquery internet-explorer datatables

我是一家在政府机构工作的网络开发承包商。我们刚刚开始遇到我们页面的问题,我相信它与Internet Explorer 11.0.26和jQuery DataTable有关。我们使用的是jQuery v1.7和DataTables 1.9,我知道它们已经老了,但它们确实与IE 11.0.25一起使用。

javaScript(JS)失败,“mergeAttributes”方法出现“不支持的错误”。我相信这仍然包含在IE11浏览器API中。

有谁知道会导致此错误的原因以及在什么条件下?

谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

更新:我找到了这个问题的来源并创建了新问题,因为我需要一些帮助才能解决这个问题,这是我的问题及解释:link

我设法重新创建它,所以在我的情况下,在使用一些特殊的css选择器之后,mergeAttributes方法被搞砸了(在我的情况下我一直在使用mootols)。在IE 11(11.0.27)中,IE = 7渲染模式。

我的猜测:在某些情况下,jQuery / Mootools选择器会修改Elements属性列表。

这是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<script src="https://ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools.js"></script>
<style type='text/css'>
.ORG{
  width: 400px;
}
</style>
<script type='text/javascript'>
window.addEvent('domready',function(){
   $('btn').addEvent('click',function(){
    $$('.randomClass') //<--WORKS
    $('cln').mergeAttributes($('inp'))
  })

    $('btnS').addEvent('click',function(){
      $$('input[class=randomClass]') // Screw ups mergeAttributes method.
    try{$('cln').mergeAttributes($('inp'))}catch(e){
      alert(e.description)
    }
  })
})
</script>


<input type='text' id='inp' value="ORIGINAL" class='ORG'></input><br>
<input type='text' id='cln' value="CLONE" class='none'></input><br>
<input type='button' value='Merrge Classes' id='btn'></input><br>
<input type='button' value='Merrge Classes, but before initiat Class selector' id='btnS'></input> <-- Seceltor used '$$('input[class=randomClass]')'

Demo(无法使用jsfiddle,因为此错误仅在IE = 7 渲染模式下出现): Here is demo

答案 1 :(得分:0)

以下是此问题的FIX。它是由datarant论坛上的carranthuohill3提供的,并引用了Dottoro.com

   // mergeAttributes, in contrast, only merges back on the
   // original attributes, not the events
    try{
        if ( dest.mergeAttributes ) {
            dest.mergeAttributes( src );
        }
    } catch (exception) {
        for (var i=0; i < src.attributes.length; i++) {
            var attr = src.attributes[i];
            var attrName = attr.name.toLowerCase ();
            if (attrName != "id" && attrName != "name") {
                dest.setAttribute (attr.name, attr.value);
            }
        }
    }