我有一个函数,当单击一个元素时,它会使该元素成为Object中的选定元素。让我告诉你。
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 attr运行。哪个很酷。它工作正常。但是,如果再次单击它,浏览器会给出错误对象不是函数。仅当您连续单击同一元素时才会发生这种情况。如果单击另一个元素,则不会发生。这很奇怪,因为函数应该运行一个单独的时间并覆盖Object elem(在函数外部定义为全局变量/对象)。我有调试原因的警报。此外,数组classIds也是在函数之外定义的。任何见解都会很棒。另外,我知道我的编码有点奇怪,我真的只是从JavaScript中的对象和方法开始。
<li title="+classIds[x].name+" onclick='selected(this)'>"+classIds[x].name+"</li>
onclick='selected(this)'
是电话
答案 0 :(得分:1)
您的代码中存在一个非常明显的问题:您正在声明一个名为elem
的全局变量(在函数外部),然后您的函数有一个名为{{1}的参数}。因此,函数中对elem
的每次引用都将是参数而不是全局参数。鉴于您如何调用该函数,该参数引用您的elem
元素,这意味着该函数当前正在覆盖该元素和/或在该元素上创建属性。
如果你更改参数的名称,说出<li>
,那么当你的意思是全局变量时,你可以使用clickedElem
,当你的意思是参数时,可以使用elem
。 / p>
除此之外,我不太清楚你想要达到的目标,所以我不知道还有什么建议。
(顺便说一下,正如我在上面的评论中所说的那样,没有必要初始化clickedElem
,因为在下一行你会立即指定它等于其他东西。但那不是'#1}。这会给你带来麻烦,但这是毫无意义的。)