在javascript中为现有的onclick属性添加更多行为

kes*_*v84 4 html javascript onclick


如何向现有的onclick事件添加更多行为,例如,如果现有对象看起来像

<a href="http://abc" onclick="sayHello()">link</a>
<script>
function sayHello(){
    alert('hello');
}

function sayGoodMorning(){
    alert('Good Morning');
}
</script>
Run Code Online (Sandbox Code Playgroud)

我怎样才能为onclick添加更多行为,以及以下内容

alert("say hello again");
sayGoodMorning()
Run Code Online (Sandbox Code Playgroud)

最诚挚的问候,凯沙夫

Anu*_*rag 10

这是最脏的方式:)

<a href=".." onclick='sayHello();alert("say hello again");sayGoodMorning()'>.</a>
Run Code Online (Sandbox Code Playgroud)

这是一个有点理智的版本.将所有东西包装成一个函数:

<a href=".." onclick="sayItAll()">..</a>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function sayItAll() {
    sayHello();
    alert("say hello again");
    sayGoodMorning();
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法.使用事件注册模型而不是依赖于onclick属性或属性.

<a id="linkId" href="...">some link</a>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

var link = document.getElementById("linkId");
addEvent(link, "click", sayHello);
addEvent(link, "click", function() {
    alert("say hello again");
});
addEvent(link, "click", sayGoodMorning);
Run Code Online (Sandbox Code Playgroud)

addEvent下面给出了该函数的跨浏览器实现(来自scottandrew.com):

function addEvent(obj, evType, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, false);
        return true;
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on" + evType, fn);
        return r;
    } else {
        alert("Handler could not be attached");
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果必须按顺序运行所有3个操作,那么您仍应继续将它们包装在单个函数中.但这种方法仍然排在第二种方法之上,尽管看起来有点冗长.

var link = document.getElementById("linkId");
addEvent(link, "click", function() {
    sayHello();
    alert("say hello again");
    sayGoodMorning();
});
Run Code Online (Sandbox Code Playgroud)


Rus*_*Cam 6

另一种未提及的方法是捕获当前分配给该element.onclick属性的函数,然后分配一个包装旧函数的新函数.一个简单的实现演示将是类似的

function addEvent(element, type, fn) {
    var old = element['on' + type] || function() {};
    element['on' + type] = function () { old(); fn(); };
}

var a = document.getElementById('a');

function sayHello(){
    alert('hello');
}

function sayGoodMorning(){
    alert('Good Morning');
}

addEvent(a, 'click', sayHello);
addEvent(a, 'click', sayGoodMorning);
Run Code Online (Sandbox Code Playgroud)

在这里工作演示