37

简而言之:我试图理解这个 TypeError 的含义:无法在 'Window' 上执行 'getComputedStyle':参数 1 不是类型 'Element' 午餐 Mediawiki 的可视化编辑器时出现错误,如下所示:

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

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

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

wiki 在 1.25alpha 上运行。

4

7 回答 7

21

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

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

代替:

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

和:

getComputedStyle( document.getElementById(this_id), "")
于 2015-04-24T07:33:36.417 回答
5

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

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

my_element = document.querySelector(#non_existing_id);

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

my_style = window.getComputedStyle(my_element);

如果无法始终正确获取元素,例如,如果querySelector未找到任何匹配项,您可以使用以下结束函数:

if (my_element === null) return;
于 2019-05-29T16:31:47.017 回答
3

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

我通过尝试不存在ng-include的AngularJS v1.5.8 得到它。type="text/ng-template"

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

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

<div>{{tab.content}}</div>
于 2017-11-03T14:02:41.710 回答
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)"
于 2018-07-17T08:16:05.810 回答
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 中不存在的下拉子级设置样式,因此会引发错误。

于 2019-09-15T11:50:06.640 回答
0

const el = document.getElementsByClassName('content-right')[0]
if (!el) return
const i = window.getComputedStyle(el).width

这是一种修复错误的方法,但我无法弄清楚为什么找不到元素,它不应该为空!

于 2021-08-20T02:13:23.570 回答
-35

错误消息非常简单:getComputedStyle需要一个Element作为它的第一个参数,并且传递了其他东西。

如果你真正需要的是帮助调试你的皮肤,你应该付出更多的努力来隔离错误。

于 2015-03-22T23:26:50.977 回答