Javascript事件处理最佳实践?

时间:2011-06-07 17:04:36

标签: javascript javascript-events

定义JavaScript调用时,如下所示:

<input type="button" onclick="someJavaScriptFunction" />

写实际通话的最佳方式是什么?我见过很多方法:

javascript:someJavascriptFunction();

justSomeJavaScriptFunction();

withoutTheSemicolon()

任何方法都有任何好处或警告吗?我意识到在某些情况下使用addEventListener会更灵活。

6 个答案:

答案 0 :(得分:5)

最佳实践本身是使用JavaScript本身附加事件:

Firefox,Chrome,Safari,Opera ......

document.getElementById('someID').addEventListener('click', function() {
    function1();
    function2();
    function3();
});

IE:

document.getElementByID('someID').attachEvent('onclick', function() {
    function1();
    function2();
    function3();
});

将两者结合起来使其发挥作用。

此外,使用MooTools或JQuery等预制框架可以使这更容易。

答案 1 :(得分:4)

如果您想要最佳练习,请将标记与脚本内容分开。在script元素中分配事件处理程序。正如您所说,使用addEventListener是实现此目的的一种方法,但如果您希望在版本9之前支持Internet Explorer版本,则必须使用attachEvent

但是,分配onevent属性是完全有效的。例如:

<script>
    window.onload = function() {
        document.getElementById('yourID').onclick = function() {
           alert('element clicked');
        };
    };
</script>

如果您只有几件物品,这可能适合您的目的。

答案 2 :(得分:2)

javascript:someJavascriptFunction();

我们在javascript:属性或书签地址字段(bookmarklets)中使用href作为网址。 例如:

<a href="javascript:myFunction()">click me</a>

我们使用分号附加多个JavaScript指令:

<span onclick="alert('first');alert('second')">click me</span>

addEventListener允许将许多函数附加到同一事件:

element.addEventListener ('click', firstFunction);
element.addEventListener ('click', secondFunction);

答案 3 :(得分:1)

有或没有分号没有区别,但是事件实际上是一行javascript而不仅仅是一个函数名,所以你可以使用分号来添加多个函数,如下所示:

<input type="button" onclick="function1();function2();function3();" />

我不确定javascript:会起作用,就像你在链接上附加一个函数作为href,而不是像下面这样的事件处理程序:

<a href="javascript:function1();function2();function3();" >A link</a>

答案 4 :(得分:1)

javascript:someJavascriptFunction();明确声明使用javascript,如果您可能有多种/不同的脚本类型,例如ECMA Script。

如果你的页面上只有Javascript(而不是多个脚本类型),那么

someJavascriptFunction()就可以了。

someJavascriptFunction();doSomethingElse();return false;用于连结/有多个陈述的分号。

所以没有'最好'的方式,只有最有意义的方式,并且是你的首选方案(在大多数情况下)。

答案 5 :(得分:0)

addEventListener是最好的方法