我试图创建一个传递两个参数的函数: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是一个属性"嵌入"在事件处理程序中。
或者,我怎样才能将这两个参数传递给函数? 我需要这样做一个拖动函数,它指定要拖动的元素和事件,但我总是将事件视为未定义。
是否与参数的顺序有关?
答案 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); };