0

バニラ JS を使用して、HTML オブジェクト (div) のプロパティ onclick を表示できるかどうかを知りたい

for (var name in element) {
        if(name == "onclick"){
            // do smt
        }
    }
4

1 に答える 1

2

のプロパティを列挙する代わりに、次のようにして のプロパティelementすぐに取得できます。onclick element

var clickHandler = element.onclick;

addEventListener最近のイベントは(そして古い IE で)バインドされておりattachEvent、イベント タイプごとに複数のハンドラーを使用できます。プロパティを設定するoneventと、1 つのハンドラーのみが許可され、上書きされる可能性があり、通常は Web ページでハンドラーをバインドする方法ではありません。

addEventListener残念ながら、 (and ) にバインドされたリスナーを取得することはできませんattachEvent。それらを追跡するラッパー関数を作成する必要があります。次に例を示します。

var events = [];
function addEvent(element, eventName, callback) {
    element.addEventListener(eventName, callback, false);
    var found = false;
    for (var i = 0; i < events.length; i++) {
        if (events[i].el === element) {
            found = true;
            events[i].list.push(callback);
            break;
        }
    }
    if (!found) {
        events.push({
            el: element,
            list: [callback]
        });
    }
}

function viewEvents(element) {
    for (var i = 0; i < events.length; i++) {
        if (events[i].el === element) {
            return events[i].list;
        }
    }
    return null;
}

そして、次のように使用します。

var div = document.getElementById("some_id");
addEvent(div, "click", function () {
    console.log("whatever");
});

console.log(viewEvents(div));

removeEventListener(もちろん、ハンドラも削除するためのラッパーが必要ですevents

于 2013-05-31T18:43:50.300 に答える