JS:无法执行' getComputedStyle' on' Window':参数不是'元素'

时间:2015-03-22 16:38:21

标签: javascript mediawiki typeerror visual-editor getcomputedstyle

简而言之:我试图理解这个TypeError的含义: 无法执行' getComputedStyle' on' Window':参数1不是'元素' 在浏览Mediawiki的VisualEditor时会出现错误,如下所示:

http://www.wiki.org.il/index.php?title=new-page&veaction=edit

该错误无法匿名创建新页面或编辑维基。 但是,使用不同的皮肤时,错误消失了:

http://www.wiki.org.il/index.php/Main_Page?useskin=vector

wiki在1.25alpha上运行。

6 个答案:

答案 0 :(得分:16)

我有同样的错误显示。当我用普通JavaScript替换jQuery选择器时,错误已得到修复。

var this_id = $(this).attr('id');

替换:

getComputedStyle( $('#'+this_id)[0], "")

使用:

getComputedStyle( document.getElementById(this_id), "")

答案 1 :(得分:2)

对于那些在AngularJS而不是jQuery中出现此错误的人:

我在AngularJS v1.5.8中尝试了ng-include一个不存在的type="text/ng-template"

 <div ng-include="tab.content">...</div>

确保在使用ng-include时,该指令的数据指向实际的页面/部分。否则,你可能想要:

<div>{{tab.content}}</div>

答案 2 :(得分:1)

在我的情况下,我使用的是ClassName

getComputedStyle( document.getElementsByClassName(this_id)) //error

它也可以在没有第二个参数" "的情况下工作。

这是我完整的运行代码:

function changeFontSize(target) {

  var minmax = document.getElementById("minmax");

  var computedStyle = window.getComputedStyle
        ? getComputedStyle(minmax) // Standards
        : minmax.currentStyle;     // Old IE

  var fontSize;

  if (computedStyle) { // This will be true on nearly all browsers
      fontSize = parseFloat(computedStyle && computedStyle.fontSize);

      if (target == "sizePlus") {
        if(fontSize<20){
        fontSize += 5;
        }

      } else if (target == "sizeMinus") {
        if(fontSize>15){
        fontSize -= 5;
        }
      }
      minmax.style.fontSize = fontSize + "px";
  }
}


onclick= "changeFontSize(this.id)"

答案 3 :(得分:0)

错误消息指出getComputedStyle要求参数为Element类型。您收到它是因为参数的类型不正确。

最常见的情况是您尝试传递一个不存在的元素作为参数:

my_element = document.querySelector(#non_existing_id);

现在该元素为null,这将导致提到的错误:

my_style = window.getComputedStyle(my_element);

如果无法始终正确获取元素,例如,如果querySelector未找到任何匹配项,则可以使用以下命令结束功能:

if (my_element === null) return;

答案 4 :(得分:0)

我在Angular6项目中遇到了相同的错误。这些解决方案似乎都不适合我。原来,问题是由于指定为dropdown的元素引起的,但其中没有下拉选项。看看下面的代码:

<span class="nav-link" id="navbarDropdownMenuLink" data-toggle="dropdown"
                          aria-haspopup="true" aria-expanded="false">
                        <i class="material-icons "
                           style="font-size: 2rem">notifications</i>
                        <span class="notification"></span>
                        <p>
                            <span class="d-lg-none d-md-block">Some Actions</span>
                        </p>
                    </span>
                    <div class="dropdown-menu dropdown-menu-left"
                         *ngIf="global.localStorageItem('isInSadHich')"
                         aria-labelledby="navbarDropdownMenuLink">
                                        <a class="dropdown-item" href="#">You have 5 new tasks</a>
                                        <a class="dropdown-item" href="#">You're now friend with Andrew</a>
                                        <a class="dropdown-item" href="#">Another Notification</a>
                                        <a class="dropdown-item" href="#">Another One</a>
                    </div>

删除代码data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"解决了该问题。

我本人认为,每次单击第一个span元素时,该范围将为父级span中不存在的下拉子项设置样式,因此会引发错误。

答案 5 :(得分:-21)

错误消息非常简单:getComputedStyle期望Element作为其第一个参数,并将其他内容传递给它。

如果您真正要求的是帮助调试您的皮肤,您应该更加努力地隔离错误。