onClick在p标签上无法正常工作

pat*_*tad 2 javascript onclick

我想将click事件绑定到每个事件,<p>但它似乎无法正常工作.

当我运行脚本时,我立即得到三个警报.我只想在点击三个中<p>'的任何一个时获得它们.

谁能告诉我我做错了什么?

编辑:Sry这就是它的样子.HTML正如它应该的那样:<p class="special">text text text</p>等等

(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]);

            }
        };
    }
})();
Run Code Online (Sandbox Code Playgroud)

PS.我不能使用jQuery atm

Sha*_*mer 7

尝试更换

pTags[i].onClick = myFunction(pTags[i]);
Run Code Online (Sandbox Code Playgroud)

pTags[i].onClick = function() { myFunction(pTags[i]); }
Run Code Online (Sandbox Code Playgroud)

您可以看到,当您指定onClick对象时,您正在将表达式的结果复制到该对象.您应该复制的是在p单击时调用的函数.

相反,您正在运行myFunction(pTags[i])执行alert()s 的命令,并获取该函数的结果.现在,由于函数不返回任何内容,因此表达式的值myFunction(pTags[i])是未定义的.

你拿这个值,并分配给它onClick.基本上你所做的是:

对于每个"特殊"段落:

  1. 执行 alert
  2. 分配undefined给段落onClick.