Javascript:Eventhandlers属性

时间:2014-06-03 11:31:20

标签: javascript

我试图创建一个传递两个参数的函数:function(target,event) 像这样:

    function doSo(e) {
    alert(e.clientX + " " + this.className);
};

main.onclick = doSo;

它运作得很好, 但是当我想指定目标时,例如:

function doSo(elt, e) {
    alert(e.clientX + " " + elt.className);
};

main.onclick = doSo(this,e);

调试器始终返回" e未定义"。

我认为e是一个属性"嵌入"在事件处理程序中。

或者,我怎样才能将这两个参数传递给函数? 我需要这样做一个拖动函数,它指定要拖动的元素和事件,但我总是将事件视为未定义。

是否与参数的顺序有关?

4 个答案:

答案 0 :(得分:0)

<div id="id_" class="class_">click</div>
<script>
    function get_data(e) { alert(e.clientX + '|' + e.target.className) }
    document.getElementById('id_').onclick = function (e) { get_data(e) }
</script>

答案 1 :(得分:0)

JS中的事件默认只有一个参数,这就是 e 未定义的原因。

function doSo(elt, e) {
    alert(e.clientX + " " + elt.className);
};

这里 elt 是JS返回的事件, elt.clientX 会起作用,但不会 e.clentX

如何将这两个参数传递给函数?

本地你不能,但是你在Drag n Drop中使用的库中肯定会有这样的东西。

答案 2 :(得分:0)

你需要编写你的函数,以便它可以使用参数,然后代理调用它:

function doSo (elt, e) {
    alert(e.clientX + " " + elt.className);
};

function doSo_ClickProxy (e) {
    doSo(this, e);
}

main.onclick = doSo_ClickProxy;

这背后的基本概念是驱动事件库(例如jQuery)如何提供它们所执行的功能(尽管它们代理它以便首先传递事件,然后根据需要传递其他参数)。

答案 3 :(得分:0)

    function doSo(elt, e) {
        alert(e.clientX + " " + elt.className);
    };
    main.onclick = function (e) { doSo(this, e); };