您可以在 HTML 标记上使用 this
标签进行 onclick 吗?以下是我的 JS 代码...
function changeImage() {
this/*<-- right there <--*/.src=a;
}
document.getElementsByTagName('img').onclick = function(){
changeImage();
} ;
我做错了什么吗?
您可以在 HTML 标记上使用 this
标签进行 onclick 吗?以下是我的 JS 代码...
function changeImage() {
this/*<-- right there <--*/.src=a;
}
document.getElementsByTagName('img').onclick = function(){
changeImage();
} ;
我做错了什么吗?
使用方法如下...
function changeImage(curr) {
console.log(curr.src);
}
document.getElementsByTagName('img').onclick = function(){
changeImage(this);
} ;
.call()
方法来调用函数并将上下文绑定到this
。changeImage.call(this)
function changeImage() {
this.src = 'http://placehold.it/200/f00';
}
document.getElementsByTagName('img')[0].onclick = function(){
changeImage.call(this);
};
getElementsByTagName
返回一个元素的实时 HTMLCollection。你需要将 onclick
处理程序应用于该集合内的元素。function changeImage() {
this.src = 'http://placehold.it/200/f00';
}
Array.prototype.forEach.call(document.getElementsByTagName('img'), function(el, i) {
el.addEventListener('click', changeImage);
});
或者您可以简化它:
Array.prototype.forEach.call(document.getElementsByTagName('img'), function(el, i) {
el.addEventListener('click', function () {
this.src = 'http://placehold.it/200/f00';
});
});
a
是所需的来源。 - user3734304你做了两件错误的事情。
changeImage
(所以this
将是undefined
或window
,这取决于你是否处于严格模式)。修复后的版本应该像这样:
var images = document.getElementsByTagName('img');
for (var i = 0; i < images.length; i++) {
images[i].onclick = function () {
changeImage.call(this);
};
}
但更整洁的版本将跳过仅执行另一个函数调用的匿名函数:
var images = document.getElementsByTagName('img');
for (var i = 0; i < images.length; i++) {
images[i].onclick = changeImage;
}
现代代码会使用addEventListener
。
var images = document.getElementsByTagName('img');
for (var i = 0; i < images.length; i++) {
images[i].addEventListener('click', changeImage);
}
然而,图像不是交互控件。您无法(默认情况下)将焦点放在它们上面,因此这种方法会使那些没有使用指针设备的人无法访问它们。最好使用专门设计用于交互的控件。
通常,这应该是一个普通按钮。您可以使用CSS来删除默认填充/边框/背景。
如果您无法在纯HTML中放置按钮,则可以使用JS添加它。
var images = document.getElementsByTagName('img');
for (var i = 0; i < images.length; i++) {
var image = images[i];
var button = document.createElement('button');
button.type = "button";
image.parentNode.replaceChild(button, image);
button.appendChild(image);
button.addEventListener('click', changeImage);
}
function changeImage(event) {
this.firstChild.src = a;
}
document.getElementsByTagName('img').onclick = changeImage;
。 - dandavis