gpt4 book ai didi

javascript - 使用 $(this); 获取 div 内的子 img; [点击事件]

转载 作者:行者123 更新时间:2023-12-02 23:11:45 24 4
gpt4 key购买 nike

我正在尝试获取单击的 div 的子图像。我想获取它的 src 值。但它返回未定义。有人能指出我正确的方向吗?

尝试使用 Jquery .find() https://api.jquery.com/find/尝试使用 Jquery .children() https://api.jquery.com/children/

两者都返回未定义。

for (let i = 0; i < $('#draw-raster > div').length; i++) {
$(document).on('click', '#raster-item'+i, () => {
let image = $(this).children('img').attr('src'); //undefined
let image2 = $(this).find('img').attr('src'); //undefined


if (image) {
console.log(image);
return alert("image child found!");
}

return setTimeout(() => {
$('#raster-item'+i).children('img').hide();
}, 4500);
});
$('#image'+i).hide();
}

加载 HTML:

   for(let i = 0; i < 16;  i++)
{
let image = displayImages();

$('#draw-raster').prepend(
"<div id=raster-item" + i + " class='imageh"+i+"' data-id=" + i + "><img src='"+ displayImages() +"' class='image "+i+"' id='image"+ i +"' alt='Failed to load image' width='173.19' height='107.3'></div>"
);
}

html 页面:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Memory</title>
<script src="inc/js/jquery.min.js"></script>
<link rel="stylesheet" href="inc/css/boostrap.min.css">
<link rel="stylesheet" href="inc/css/memory.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>

<div class="container justify-content-center">
<div class="wrapper">
<div class="row">
<div class="col-lg-9">
<div class="card">
<div class="card-header bg-dark" style="color:white;">
<h2>Memory</h2>
</div>
<div class="card-body">
<section class="col-12 mx-auto" id="draw-raster">

</section>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card">
<div class="card-header bg-dark" style="color:white;">
<h2>Turns</h2>
</div>
<div class="card-body">
<div id="turns">Turns: 0</div>
<div id="sets">Sets: 0</div>
</div>
</div>
<div class="form-group">
<button class="btn btn-success col-12" type="button" id="reset">Reset scores</button>
</div>
</div>
</div>
</div>
</div>

<script src="inc/js/memory.js"></script>

</body>
</html>

两次尝试都返回未定义,我不确定什么会起作用。是的,我也一直在向谷歌发送垃圾邮件。 :'^)

最佳答案

关于代码的一些注释:

1) 如果您想使用 this,您需要从箭头函数切换回常规匿名函数。箭头函数没有自己的 this ,并且会从外部词法环境借用上下文。这就是为什么您的代码始终返回未定义的原因。

2)你不需要循环。使用 jQuery 的好处是您可以同时操作所有元素的集合。在您的情况下,您将单个事件监听器附加到父元素(此处:document)并等待事件从 .raster-item img 中冒泡,并且被“捕获”。这称为event delegation当您想要在 DOM 加载后处理添加到 DOM 的新元素时非常有用。

2)您会发现使用一个类比使用许多 id 更容易。

以下是基于您的代码并进行了这些更改的示例:

// Use event delegation to add an event listener to the element with
// the container class that watches out for click events on **all**
// elements with the raster-item class that contain images
$('.container').on('click', '.raster-item img', function () {

// `$(this)` will be the image element, so simply grab its src
// from the attribute
console.log($(this).attr('src'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div class="raster-item"><img src="https://dummyimage.com/50x50/555/fff.png" /></div>
<div class="raster-item"><img src="https://dummyimage.com/50x50/777/fff.png" /></div>
<div class="raster-item"><img src="https://dummyimage.com/50x50/999/fff.png"/></div>
<div class="raster-item"><img src="https://dummyimage.com/50x50/bbb/fff.png" /></div>
</div>

关于javascript - 使用 $(this); 获取 div 内的子 img; [点击事件],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com