2014-05-12 58 views

回答

0

虽然MS文档明确说明它们不支持的document.all了,有些程序测试表明IE11“悄悄”仍然确实支持的document.all,显然。

在IE11,document.all通过本身,将在适当的功能测试中使用,是“falsy”,这意味着它会失败的特征存在测试 - 任何不支持的功能应该。但是,如果你直接使用它,例如document.all('fieldname'),你仍然会得到一个ID为'fieldname'的元素的引用。

考虑下面的HTML片段,将其在IE11版本11.0.9600.17041测试:

<html> 
<script language="javascript"> 
    function testDA(){ 
     if (document.all){ 
     alert('Yes: ' + document.all['foo'].value); 
     } else { 
     alert('No: But...' + document.all['foo'].value); 
     } 

     var x = document.all['payday']; 
     x.click(); 

     var y = document.all('payday'); 
     y.click(); 

     document.all('payday').click(); 
    } 

    function clicked(){ 
     alert('clicked.'); 
    } 
</script> 
<form> 
    <button onclick='testDA()'>Button 1</button> 
    <button id='payday' onclick='clicked()'>Button 2</button> 
    <input type='text' id='foo' value='I am not here.'> 
</form> 
</html> 

加载这个页面到IE11,然后单击“按钮1”,你会看到一个警告对话框弹出说'不,但是......我不在这里'。这表明document.all中的if正在返回false,跳到else。然而,通过该财产的参考显然是有效的。

注意,按钮标记Button 2和具有“工资日”的ID具有限定的onclick处理程序,它被编程在testDA功能通过document.all经由数组引用和一个函数调用的参考,并在直接引用所引用OP在这里发布的方式。在这个测试案例中,所有三个工作 - 在每种情况下,为按钮定义的点击功能都会触发。

为了兼容性目的,似乎这个“特征”是故意假设的(?),但是鉴于MS的文档明确声明它“已被删除”,暗示我可能会随着KB补丁的消失而消失, OS服务包。警告jscriptor。