【问题标题】:JavaScript OnClick returning error Object is not a functionJavaScript OnClick 返回错误对象不是函数
【发布时间】:2011-10-03 02:58:36
【问题描述】:

我有一个功能,当单击一个元素时,它会使该元素成为对象中的选定元素。让我给你看看。

var elem = new Object();
elem = {
    title:'',//string
    num:null,//number
    selected:null
}
function selected(elem){
    elem.title = elem.getAttribute("title") || this['title'];
    alert(elem.title);
    for(x=0;x<classIds.length;x++){
        if(elem.title==classIds[x].name){
            elem.num=x; 
            elem.selected=classIds[x];
            alert(elem.selected.properties);
        }
    }
}

所以当一个元素被点击时,被选择的函数从元素上的一个 onlick 属性运行。这很酷。它工作正常。但是,如果您再次单击它,浏览器会给出错误 Object is not a function。仅当您连续单击同一元素时才会发生这种情况。如果您单击另一个元素,则不会发生。这很奇怪,因为该函数应该单独运行并覆盖 Object elem(在函数外部定义为全局变量/对象)。由于调试原因,我有警报。此外,数组 classIds 也是在函数之外定义的。任何见解都会很棒。另外,我知道我的编码有点奇怪,我真的只是从 JavaScript 中的对象和方法开始。

编辑

Onclick 在下面这样调用

<li title="+classIds[x].name+" onclick='selected(this)'>"+classIds[x].name+"</li>

所以...

onclick='selected(this)'

是来电

【问题讨论】:

  • 请告诉我们您如何称呼selected()。问题可能出在传递给该函数的参数上。
  • 不是您的实际问题,但是如果您立即将 elem 分配给下一行的另一个对象,那么将它初始化为一个新对象是没有意义的。
  • 能显示classIds的结构和html部分代码吗?
  • 好的,我已经改了代码来显示调用

标签: javascript dom object methods web


【解决方案1】:

您的代码中有一个非常明显的问题:您声明了一个名为elem 的全局变量(在您的函数之外),然后您的函数有一个也称为elem 的参数。因此,函数中对elem 的每个引用都将指向参数而不是全局参数。鉴于您调用函数的方式,该参数引用了您的 &lt;li&gt; 元素,这意味着该函数当前正在覆盖和/或在该元素上创建属性。

如果你改变参数的名字,比如clickedElem,那么你可以在函数中使用elem来表示全局变量,clickedElem表示参数。

除此之外,我不太确定您要达到什么目标,所以我不知道还有什么建议。

(顺便说一句,正如我在上面的评论中所说,初始化elem = new Object() 是没有意义的,因为在下一行你会立即将它分配给其他东西。但这不会给你带来问题,这只是毫无意义的。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2014-12-26
    • 1970-01-01
    • 2015-08-12
    • 2017-10-27
    • 2019-11-13
    相关资源
    最近更新 更多