虽然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。