JavaScript事件处理程序-为什么没有警报?

JavaScript事件处理程序-为什么没有警报?,javascript,Javascript,我是JavaScript的新手,尝试学习事件处理程序。看看这把小提琴,谁能告诉我为什么点击链接时弹出窗口没有出现 我还复制了下面的代码 <a href="#" title="click me" id="clickLink">click me</a> function addEventHandler(oNode, sEvt, fFunc, bCaptures){ if (typeof(window.event) != "undefined") o

我是JavaScript的新手,尝试学习事件处理程序。看看这把小提琴,谁能告诉我为什么点击链接时弹出窗口没有出现

我还复制了下面的代码

<a href="#" title="click me" id="clickLink">click me</a>


function addEventHandler(oNode, sEvt, fFunc, bCaptures){
    if (typeof(window.event) != "undefined")
        oNode.attachEvent("on"+sEvt, fFunc);
    else
        oNode.addEventListener(sEvt,fFunc,bCaptures);
}

function onLinkClicked(e) {
    alert("you clicked the link");
}
function setUpClickHandler(){
    addEventHanlder(document.getElementById('clickLink'), "click", onLinkClicked, false);
}

addEventHandler(window,"load",setUpClickHandler,false);

函数加法器(oNode、sEvt、fFunc、bCaptures){
if(typeof(window.event)!=“未定义”)
oNode.附件(“on”+sEvt,fFunc);
其他的
oNode.addEventListener(sEvt、fFunc、bCaptures);
}
函数onLinkClicked(e){
警报(“您单击了链接”);
}
函数setUpClickHandler(){
AddEventHander(document.getElementById('clickLink'),“click”,onLinkClicked,false);
}
addEventHandler(窗口“加载”,设置ClickHandler,false);

您的addEventHandler需要注意:

function addEventHandler(oNode, sEvt, fFunc, bCaptures) {
    oNode.attachEvent ? oNode.attachEvent ("on" + sEvt, fFunc) :
                        oNode.addEventListener (sEvt, fFunc, bCaptures);
}

您需要在事件处理程序本身中检查窗口。事件

您的addEventHandler需要调整:

function addEventHandler(oNode, sEvt, fFunc, bCaptures) {
    oNode.attachEvent ? oNode.attachEvent ("on" + sEvt, fFunc) :
                        oNode.addEventListener (sEvt, fFunc, bCaptures);
}
您需要在事件处理程序本身中检查窗口。事件有几个问题:

  • 你有一个反复出现的打字错误,“Hanlder”而不是“Handler”。至少有两个,一个用于执行
    设置ClickHander
    (原文如此)功能,另一个在其中(
    AddEventHander
  • 还有,你有“Sevt”,意思是“Sevt”。(JavaScript区分大小写。)
。使用可为您提供显示错误的控制台的浏览器。使用调试器单步执行代码,在运行时使用检查器查看变量值等。

有几个问题:

  • 你有一个反复出现的打字错误,“Hanlder”而不是“Handler”。至少有两个,一个用于执行
    设置ClickHander
    (原文如此)功能,另一个在其中(
    AddEventHander
  • 还有,你有“Sevt”,意思是“Sevt”。(JavaScript区分大小写。)

。使用可为您提供显示错误的控制台的浏览器。使用调试器单步执行代码,在运行时使用检查器查看变量值等。

基本上有三个问题:

  • 你有一些拼写错误,例如“handle”而不是“Handler”和“Sevt”而不是“Sevt”

  • 页面加载后,代码已经运行,因此您添加到
    窗口的事件处理程序将永远不会被调用。将JSFIDLE从
    onLoad
    更改为
    no wrap(head)

  • 你的“IE检测”不起作用。我在Chrome中遇到这个错误:

    未捕获类型错误:对象<代码>http://fiddle.jshell.net/_display/#
    没有方法
    “attachEvent”

    最好是测试函数
    window.attachEvent
    是否存在。我还认为
    window.event
    仅在引发事件时可用

如果这一点得到纠正


进一步说明:

无需在每次调用函数时测试支持哪种方法(即
attachEvent
addEventListener
)。它在页面的生命周期内不会更改。最好是一开始只测试一次。例如:

var addEventHandler = (function() {
    if(window.attachEvent) {
        return function(oNode, sEvt, fFunc) {
            oNode.attachEvent("on"+sEvt, fFunc);
        };
    }
    else {
        return function(oNode, sEvt, fFunc, bCaptures) {
            oNode.addEventListener(sEvt,fFunc,bCaptures);
        };
    }
}());

这会将支持的函数分配给
addEventHandler

基本上有三个问题:

  • 你有一些拼写错误,例如“handle”而不是“Handler”和“Sevt”而不是“Sevt”

  • 页面加载后,代码已经运行,因此您添加到
    窗口的事件处理程序将永远不会被调用。将JSFIDLE从
    onLoad
    更改为
    no wrap(head)

  • 你的“IE检测”不起作用。我在Chrome中遇到这个错误:

    未捕获类型错误:对象<代码>http://fiddle.jshell.net/_display/#
    没有方法
    “attachEvent”

    最好是测试函数
    window.attachEvent
    是否存在。我还认为
    window.event
    仅在引发事件时可用

如果这一点得到纠正


进一步说明:

无需在每次调用函数时测试支持哪种方法(即
attachEvent
addEventListener
)。它在页面的生命周期内不会更改。最好是一开始只测试一次。例如:

var addEventHandler = (function() {
    if(window.attachEvent) {
        return function(oNode, sEvt, fFunc) {
            oNode.attachEvent("on"+sEvt, fFunc);
        };
    }
    else {
        return function(oNode, sEvt, fFunc, bCaptures) {
            oNode.addEventListener(sEvt,fFunc,bCaptures);
        };
    }
}());

这会将支持的函数分配给
addEventHandler

我得到错误:未捕获引用错误:未定义setUpClickHandler在
addEventHandler
@Pekka:有多个输入错误。我得到错误:未捕获引用错误:未定义setUpClickHandler输入错误
addEventHanlder
@Pekka:不止一个。没错,尽管他的版本大部分时间都能正常工作。虽然这不是实际的问题。谢谢,但我看不出你答案中的代码和OP中的代码有什么真正的区别。我不是在addEventHandler函数中检查窗口事件吗?是的,尽管他的版本大部分时间都可以工作。虽然这不是实际的问题。谢谢,但我看不出你答案中的代码和OP中的代码有什么真正的区别。我不是在addEventHandler函数中检查窗口事件吗?谢谢调试器的建议,但我发现它们非常混乱。如果您碰巧知道一个很好的教程,它一步一步地解释了调试过程(以及如何解释数据),那么请推荐。干杯。@Michael:我不知道有,但快速搜索表明它们就在那里。例如,Chrome团队有视频等等:当然,VisualStudio.Net周围有一个巨大的社区,我相信人们已经写下了如何使用它。Firebug(Firefox的调试器)有一个wiki(我不知道它有多好):感谢调试器的推荐,但我发现它们非常混乱。如果您碰巧知道一个很好的教程,它一步一步地解释了调试过程(以及如何解释数据),那么请推荐。干杯。@Michael:我不知道有,但快速搜索表明它们就在那里。为inst