当前位置: 首页 > 面试题库 >

名为“ animate”的JS函数在Chrome中不起作用,但在IE中起作用

段干昊然
2023-03-14
问题内容

这行不通,什么也没发生。我如何使其工作,我在做什么错?

function animate() {

  var div = document.getElementById('demo');

  div.style.left = "200px";

  div.style.color = "red";

}


#demo {

  position: absolute;

}


<p id='demo' onclick="animate()">lolol</p>

问题答案:

问题在于,由于您使用事件处理程序的content属性,因此您的全局函数

window.animate

被…遮盖

Element.prototype.animate

…这是最近在Web Animations中引入的:

5.21Element接口扩展

由于DOM元素可能是动画的目标,因此Element 接口[
DOM4 ]扩展如下:

 Element implements Animatable;

这允许以下类型的用法。

 elem.animate({ color: 'red' }, 2000);

在获取事件处理程序的当前值的[步骤10]中说明了此行为:

词汇环境范围

  1. 如果 H
    是元素的事件处理程序,则让 Scope 为NewObjectEnvironment( document全局环境 )的结果。

否则, HWindow对象的事件处理程序:让 Scope全局环境

  1. 如果 表单所有者 不为null,则使 Scope 为NewObjectEnvironment( form owner
    Scope )的结果。

  2. 如果 element 不为null,则让 Scope 为NewObjectEnvironment( element,Scope
    )的结果。

注意: _NewObjectEnvironment()是在ECMAScript版本5第10.2.2.3节中定义的NewObjectEnvironment(O,E)
这意味着目标元素的范围会覆盖全局范围。

因此,您可以

  • 重命名您的功能

    function animate__() {
    

    var div = document.getElementById(‘demo’);

    div.style.left = “200px”;

    div.style.color = “red”;

    }

    #demo {
    

    position: absolute;

    }

    <p id='demo' onclick="animate__()">Click me</p>
    
  • 使用window.animate(假设window尚未被遮盖):

    <p id='demo' onclick="window.animate()">Click me</p>
    
    function animate() {
    

    var div = document.getElementById(‘demo’);

    div.style.left = “200px”;

    div.style.color = “red”;

    }

    #demo {
    

    position: absolute;

    }

    <p id='demo' onclick="window.animate()">Click me</p>
    
  • 使用事件处理程序IDL属性代替内容属性one:

    document.getElementById('demo').onclick = animate;
    
    function animate() {
    

    var div = document.getElementById(‘demo’);

    div.style.left = “200px”;

    div.style.color = “red”;

    }

    document.getElementById(‘demo’).onclick = animate;

    #demo {
    

    position: absolute;

    }

    <p id='demo'>Click me</p>
    
  • 使用事件侦听器代替事件处理程序:

    document.getElementById('demo').addEventListener('click', animate);
    
    function animate() {
    

    var div = document.getElementById(‘demo’);

    div.style.left = “200px”;

    div.style.color = “red”;

    }

    document.getElementById(‘demo’).addEventListener(‘click’, animate);

    #demo {
    

    position: absolute;

    }

    <p id='demo'>Click me</p>
    


 类似资料:
  • 我有一些 在量角器中,我们搜索并找到元素,检查文本是否符合我们的期望,然后对该元素调用。测试在Chrome中运行良好,但在IE中就好像没有点击发生一样。破坏了测试。 IE 11是否支持点击

  • 问题内容: 以下是我的JavaScript(mootools)代码: 在除IE之外的所有浏览器中,这都可以正常工作。但是在IE中,这会导致错误。我有IE8,因此在使用其JavaScript调试器时,我发现该对象没有导致错误的方法,因此正在提交表单。在Firefox(我使用Firebug发现)的情况下支持该方法。 有帮助吗? 问题答案: 在IE中,您可以使用 达到相同的结果。 为了不出错,您可以测试

  • 问题内容: 我注意到less.js在firefox中工作,但在Chrome中不工作,或者是因为我出错了吗? 即使我尝试在Chrome中仍然无法使用,我在某个地方犯了错误吗? 问题答案: 通过您提供的链接: 如果您使用的是Chrome,Less.js浏览器脚本当前将无法使用,并且由于已知的Chrome问题,网页的路径以“file:///”开头。

  • 问题内容: 由于某种原因,似乎响应JS无法正常工作。我正在IE 8中使用媒体查询来更改各种大小的监视器的背景图像。在IE 8中,没有背景,只有纯色。 代码如下: 媒体查询如下所示: 上面的代码在IE 8中无法工作是有原因的吗?我还应该尝试使用另一个JS来使IE 8 Media Queries工作吗? 注意:看来html5-shiv确实有效。我正在实时Web服务器上进行测试。 问题答案: 同样的问题

  • 问题内容: 我有以下功能 但是 在ie7中不起作用,那我该怎么办!我想将光标放在输入中! 谢谢 更新 很好的解决方案,谢谢,但是现在在opera中不起作用:( 问题答案: 对于IE,您需要使用settimeout函数,因为它很懒,例如: 对于opera,这可能会有所帮助:如何在opera文本框上的所需索引中设置焦点

  • 问题内容: 我试图在我的一个JavaScript程序中应用一个字符串。在Mozilla下它可以正常工作,但是当我在IE8中尝试时会显示错误。有人知道这是怎么回事吗?无论如何,我可以使其在IE中工作吗? 码: 错误显示: 问题答案: 添加以下代码以向字符串添加修剪功能。