Javascript onClick在p标记上无法正常工作
我想将单击事件绑定到每个Javascript onClick在p标记上无法正常工作,javascript,onclick,Javascript,Onclick,我想将单击事件绑定到每个,但它似乎无法正常工作 当我运行脚本时,我立即收到三个警报。我只想在单击三个'中的任何一个时获取它们 谁能告诉我我做错了什么 编辑:Sry这就是它的样子。 HTML就像它应该的那样:text等等 (function () { var myFunction = function (theP) { alert(theP.id) } window.onload = function () {
,但它似乎无法正常工作
当我运行脚本时,我立即收到三个警报。我只想在单击三个'
中的任何一个时获取它们
谁能告诉我我做错了什么
编辑:Sry这就是它的样子。
HTML就像它应该的那样:text
等等
(function () {
var myFunction = function (theP) {
alert(theP.id)
}
window.onload = function () {
var pTags = document.getElementsByTagName('p'),
pLength = pTags.length,
i;
for (i = 0; i < pLength; i += 1) {
if(pTags[i].className == 'special'){
pTags[i].onClick = myFunction(pTags[i]);
}
};
}
})();
(函数(){
var myFunction=函数(theP){
警报(密码id)
}
window.onload=函数(){
var pTags=document.getElementsByTagName('p'),
充压长度=ptag.长度,
我
对于(i=0;i
注:我无法使用jQuery atm请尝试替换
pTags[i].onClick = myFunction(pTags[i]);
与
您可以看到,当您指定给对象的onClick
时,您正在将表达式的结果复制到该对象。您应该复制的是单击p
时要调用的函数
相反,您运行的是命令myFunction(pTags[i])
,该命令执行alert()
s,并获取函数的结果。现在,由于函数不返回任何内容,表达式myFunction(pTags[i])
的值未定义
然后取该值,并将其分配给onClick
。所以基本上你所做的是:
对于每个“特殊”段落:
警报
undefined
分配给段落的onClick
myFunction需要返回一个函数才能让代码正常工作 下面有人提到一个尝试创建内联函数的选项,但由于闭包绑定是使用变量而不是值进行的,因此这将不起作用(代码中的
i
将在函数中包含后进行修改)
创建函数并使其工作有两种明显的方法。一个是创建每个处理程序函数。。。另一个是使用this
获取元素
(function () {
var myFunction = function (theP) {
return function() {
alert(theP.id);
}
}
window.onload = function () {
var pTags = document.getElementsByTagName('p'),
pLength = pTags.length,
i;
for (i = 0; i < pLength; i += 1) {
if(pTags[i].className == 'special'){
pTags[i].onClick = myFunction(pTags[i]);
}
};
}
})();
第二种格式是首选格式,因为浏览器使用的内存要少得多。。onclick区分大小写,不是吗?您正在调用函数。使用括号时,调用函数 onclick需要函数引用: 您可以通过以下方式修改代码:
myFunction(theP){
return function(){alert(theP.id)};
}
这将确保您的调用返回函数引用而不是值。谢谢您的回答。非常感谢
我重写了我自己的脚本,并像这样解决了它: 看起来怎么样
(function () {
var myFunction1 = function (theP) {
theP.onclick = myFunction2;
},
myFunction2 = function(){
alert('hello world')
}
window.onload = function () {
var pTags = document.getElementsByTagName('p'),
pLength = pTags.length,
i;
for (i = 0; i < pLength; i += 1) {
if(pTags[i].className == 'special'){
myFunction1(pTags[i]);
}
}
}
})();
(函数(){
var myFunction1=函数(theP){
theP.onclick=myFunction2;
},
myFunction2=函数(){
警报(“你好,世界”)
}
window.onload=函数(){
var pTags=document.getElementsByTagName('p'),
充压长度=ptag.长度,
我
对于(i=0;i
我们能看到您的html代码片段吗?你没有嵌套的p标签,是吗?一旦你解决了scraimer提到的函数问题,这段代码仍然不能在所有浏览器中工作。考虑与在.@艾伦中显示的方法绑定,我精确地编辑了我的帖子。您所做的是将单击事件分配给函数调用(即现在调用函数,并将结果分配给事件)。您需要的是将事件实际分配给函数。顺便说一句,刚刚测试过,onClick
在Chrome最新版本、Opera 10、Firefox3.7和IE8上不起作用。只有onclick
work所有人都以onclick
为例,所以我很震惊,我的生活中是否有重大误解,幸运的是没有谢谢你!因为我输入了错误的东西,所以我更改了代码。myFunction声明为'var myFunction=function(theP){..}'
myFunction(theP){
return function(){alert(theP.id)};
}
(function () {
var myFunction1 = function (theP) {
theP.onclick = myFunction2;
},
myFunction2 = function(){
alert('hello world')
}
window.onload = function () {
var pTags = document.getElementsByTagName('p'),
pLength = pTags.length,
i;
for (i = 0; i < pLength; i += 1) {
if(pTags[i].className == 'special'){
myFunction1(pTags[i]);
}
}
}
})();