Javascript:更改 onchange 并使用此参数
Javascript: change onchange AND use this-parameter
通过搜索网络我发现我不能使用 document.getElementById("myid").onchange="myfunc(this);";
因为我必须分配一个函数而不是一个字符串。但是当我改用 document.getElementById("myid").onchange = myfunc(this);
时, this
指的是什么?我希望 this
成为触发 onchange 事件的 HTML 元素,而不是我正在更改 onchange 属性的函数。
您可以接收事件并从中获取源元素:
function myfunc(ev) {
console.log(ev.srcElement);
}
document.getElementById("myid").onchange = myfunc;
在您的示例中,您没有使用事件处理程序引用函数,而是执行函数。这就是为什么 this
可能引用 Window(取决于此行代码所在的位置)或其他元素。
但是当您将事件处理程序定义为 html 元素的属性时,this
可以提供帮助:
https://www.w3schools.com/tags/ev_onchange.asp
更多信息:
https://developer.mozilla.org/en-US/docs/Web/Events/change
标准方法不是将元素作为第一个参数传递给函数,而是在函数中使用 this
引用元素,因为 this
将自动绑定到该元素。这是来自 MDN article on onclick
,但它适用于所有 on
-事件属性:
Within the handler, this
will be the element upon which the event was triggered.
所以你可以写:
document.getElementById("myid").onchange = myfunc;
... 在您的函数中:
function myfunc() {
console.log(this.id + ' changed'); // you can just refer to `this`
}
如果出于某种原因你确实需要函数的第一个参数作为相关元素,那么你可以使用 bind
:
var elem = document.getElementById("myid");
elem.onchange = myfunc.bind(elem, elem);
注意elem
指定了两次;第一次定义 this
,第二次定义第一个参数的值。
所以现在这行得通了:
function myfunc(elem) {
console.log(elem.id + ' changed');
}
通过搜索网络我发现我不能使用 document.getElementById("myid").onchange="myfunc(this);";
因为我必须分配一个函数而不是一个字符串。但是当我改用 document.getElementById("myid").onchange = myfunc(this);
时, this
指的是什么?我希望 this
成为触发 onchange 事件的 HTML 元素,而不是我正在更改 onchange 属性的函数。
您可以接收事件并从中获取源元素:
function myfunc(ev) {
console.log(ev.srcElement);
}
document.getElementById("myid").onchange = myfunc;
在您的示例中,您没有使用事件处理程序引用函数,而是执行函数。这就是为什么 this
可能引用 Window(取决于此行代码所在的位置)或其他元素。
但是当您将事件处理程序定义为 html 元素的属性时,this
可以提供帮助:
https://www.w3schools.com/tags/ev_onchange.asp
更多信息: https://developer.mozilla.org/en-US/docs/Web/Events/change
标准方法不是将元素作为第一个参数传递给函数,而是在函数中使用 this
引用元素,因为 this
将自动绑定到该元素。这是来自 MDN article on onclick
,但它适用于所有 on
-事件属性:
Within the handler,
this
will be the element upon which the event was triggered.
所以你可以写:
document.getElementById("myid").onchange = myfunc;
... 在您的函数中:
function myfunc() {
console.log(this.id + ' changed'); // you can just refer to `this`
}
如果出于某种原因你确实需要函数的第一个参数作为相关元素,那么你可以使用 bind
:
var elem = document.getElementById("myid");
elem.onchange = myfunc.bind(elem, elem);
注意elem
指定了两次;第一次定义 this
,第二次定义第一个参数的值。
所以现在这行得通了:
function myfunc(elem) {
console.log(elem.id + ' changed');
}