jquery - 使用jquery从图像元素列表中获取特定图像元素的数据id属性值?
问题描述
我有一个产品表和产品图像表。每个产品可能有多个图像。在产品编辑表单中,我渲染了该产品的所有图像。我想通过单击每个图像中包含的十字按钮来删除每个图像。
为了删除特定图像,我需要图像 ID,因此我使用data-id
属性传递了该 ID。但是,当我单击十字按钮时,我总是得到第一个图像 ID。我需要那个点击的图片ID。我怎么才能得到它?
$(document).on("click", "#imagePosition", function() {
var id = $("#singleImage").attr("data-id");
console.log(id);
$.ajax({
type: 'GET',
url: "/destroySingleImage",
dataType: 'json',
data: {
id: id
},
success: function(data) {
console.log('hi');
alert("added to cart");
}
});
});
<label for="images">Product Images :</label> @if(count($product->images)> 0)
<div class="row">
@foreach ($product->images as $image)
<div style="position:relative;">
<button type="submit" class="close imagePosition" id="imagePosition">
<span>×</span>
</button>
<img alt="preview image" id="singleImage" src="{{asset('storage/'.$image->image)}}" alt="image" data-id="{{$image->id}}" style="width:300px;height:300px; margin:5px;">
</div>
@endforeach
</div>
@endif
解决方案
id
主要问题是因为您的循环正在生成具有多次重复相同属性的 HTML 元素。这是无效的,因为id
属性的值在 DOM 中必须是唯一的。
要解决此问题,请删除id
并改为使用class
属性。然后,您可以从引用遍历 DOM,button
从而引发 click 事件以查找相关.singleimage
元素并读取其data-id
.
另请注意,我对逻辑进行了一些调整以满足最佳实践,例如在处理数据属性时使用data()
代替attr()
,以及将 CSS 规则放在外部样式表中而不是内联style
属性中。
说了这么多,试试这个:
$(document).on("click", ".imagePosition", function() {
var id = $(this).next('.singleimage').data('id');
console.log(id);
// AJAX request here...
});
.row>div {
position: relative;
}
.singleimage {
width: 300px;
height: 300px;
margin: 5px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="images">Product Images :</label>
<div class="row">
<div>
<button type="submit" class="close imagePosition">
<span>×</span>
</button>
<img alt="preview image" class="singleimage" src="{{asset('storage/'.$image->image)}}" alt="image" data-id="001" />
</div>
<div>
<button type="submit" class="close imagePosition">
<span>×</span>
</button>
<img alt="preview image" class="singleimage" src="{{asset('storage/'.$image->image)}}" alt="image" data-id="002" />
</div>
<div>
<button type="submit" class="close imagePosition">
<span>×</span>
</button>
<img alt="preview image" class="singleimage" src="{{asset('storage/'.$image->image)}}" alt="image" data-id="003" />
</div>
</div>
推荐阅读
- android - 从 Flutter 插件获取 v4.app.FragmentManager
- react-native - 如何检测是否使用“await”调用方法 ae 返回 Promise
- r - 根据条件和时期(部分)重叠计算两个时期日期集之间的重叠天数
- angular - 角度火力基地类型“字符串”不可分配给类型“日期”
- apache-tomee - tomee 7 和 apache-tomee-plume-1.7.6 之间的区别
- ios - 调用放置在数组中的函数
- python - 沿二维数组(numpy.,tensorflow)中的第一个维度的每个元素的索引数组
- python - 在python中修改子数组的值
- css - Flexbox,按列包装项目
- python - 如何使用 Python / Django 捕获 DOM 点击?