多个产品的模态 window
Modal window for several products
我有问题。我需要为每个产品制作模态window,但在模态window中,所有产品只显示最后一个产品。我尝试分配 id 标识符,但只有第一个产品的模态 window 有效。
window.onload = function() {
$('.img-for-modal').click(function() {
$('.modal').css('display', 'block');
});
$('.close').click(function() {
$('.modal').css('display', 'none');
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="products-wrap">
<table class="product">
<tr>
<td class="img" rowspan="3">
<img class="img-for-modal" src="media/products-image/1.jpg">
<div class="modal">
<span class="close">×</span>
<img class="modal-img" src="media/products-image/1.jpg">
</div>
</td>
<td class="product-info">
<article>Lorem Ipsum is simply dummy text of the printing V1.0</article>
</td>
</tr>
<tr>
<td class="product-info">
<b>Цена: </b>200 руб.
</td>
</tr>
<tr>
<td class="product-delete">
<a href="#">Добавить в корзину</a>
</td>
</tr>
</table>
我建议你改成这个,它会显示最近的模态并关闭最近的模态。您当前的代码选择了所有具有 class 模态
的项目
注意我使用 jQuery $(function() { ... });
而不是 window.onload = function() { ... }
$(function() {
$('.img-for-modal').click(function() {
$(this).next(".modal").show();
});
$('.close').click(function() {
$(this).closest(".modal").hide();
});
});
.modal { display:none}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="products-wrap">
<table class="product">
<tr>
<td class="img" rowspan="3">
<img class="img-for-modal" src="media/products-image/1.jpg">
<div class="modal">
<span class="close">×</span>
<img class="modal-img" src="media/products-image/1.jpg">
</div>
</td>
<td class="product-info">
<article>Lorem Ipsum is simply dummy text of the printing V1.0</article>
</td>
</tr>
<tr>
<td class="product-info">
<b>Цена: </b>200 руб.
</td>
</tr>
<tr>
<td class="product-delete">
<a href="#">Добавить в корзину</a>
</td>
</tr>
</table>
如果您需要模态框来显示动态内容,并且您没有使用 Angular 或 React 之类的框架来为您更新组件 - 那么您将需要使用专用的模态库.这将帮助您管理多个模式实例,以及所有显示绑定。
我过去曾为此目的使用过 Bootbox.js - 如果您正在使用 Bootstrap,请检查一下。如果您不使用 Bootstrap,还有其他插件可以帮助您完成相同的任务。
模式的问题在于,根据设计,任何时候只能有一个实例(想想单例)。所以每次你调用它,你都在调用同一个实例。所以...如果您尝试填充多个实例 - 它不会发生。将仅应用或最后一个数据集。
使用问题
因为您选择了页面上的所有模式并全部显示。
$('.modal').css('display', 'block');
您没有选择与您选择的内容相对应的模式。在您的情况下,模式位于图像旁边,因此请抓住下一个元素并显示它。
$(this).next('.modal').css('display', 'block');
人们倾向于做的其他选择是数据属性和 ID。您添加一个数据属性,该属性具有您要显示的项目的 ID。因此,您阅读了属性,然后显示了该项目。
<img class="img-for-modal" src="media/products-image/1.jpg" data-toggles="#modal1">
<div class="modal" id="modal1">
比JavaScript还要看属性
var selector = $(this).data("toggles")
$(selector).css('display', 'block');
我有问题。我需要为每个产品制作模态window,但在模态window中,所有产品只显示最后一个产品。我尝试分配 id 标识符,但只有第一个产品的模态 window 有效。
window.onload = function() {
$('.img-for-modal').click(function() {
$('.modal').css('display', 'block');
});
$('.close').click(function() {
$('.modal').css('display', 'none');
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="products-wrap">
<table class="product">
<tr>
<td class="img" rowspan="3">
<img class="img-for-modal" src="media/products-image/1.jpg">
<div class="modal">
<span class="close">×</span>
<img class="modal-img" src="media/products-image/1.jpg">
</div>
</td>
<td class="product-info">
<article>Lorem Ipsum is simply dummy text of the printing V1.0</article>
</td>
</tr>
<tr>
<td class="product-info">
<b>Цена: </b>200 руб.
</td>
</tr>
<tr>
<td class="product-delete">
<a href="#">Добавить в корзину</a>
</td>
</tr>
</table>
我建议你改成这个,它会显示最近的模态并关闭最近的模态。您当前的代码选择了所有具有 class 模态
的项目注意我使用 jQuery $(function() { ... });
而不是 window.onload = function() { ... }
$(function() {
$('.img-for-modal').click(function() {
$(this).next(".modal").show();
});
$('.close').click(function() {
$(this).closest(".modal").hide();
});
});
.modal { display:none}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="products-wrap">
<table class="product">
<tr>
<td class="img" rowspan="3">
<img class="img-for-modal" src="media/products-image/1.jpg">
<div class="modal">
<span class="close">×</span>
<img class="modal-img" src="media/products-image/1.jpg">
</div>
</td>
<td class="product-info">
<article>Lorem Ipsum is simply dummy text of the printing V1.0</article>
</td>
</tr>
<tr>
<td class="product-info">
<b>Цена: </b>200 руб.
</td>
</tr>
<tr>
<td class="product-delete">
<a href="#">Добавить в корзину</a>
</td>
</tr>
</table>
如果您需要模态框来显示动态内容,并且您没有使用 Angular 或 React 之类的框架来为您更新组件 - 那么您将需要使用专用的模态库.这将帮助您管理多个模式实例,以及所有显示绑定。
我过去曾为此目的使用过 Bootbox.js - 如果您正在使用 Bootstrap,请检查一下。如果您不使用 Bootstrap,还有其他插件可以帮助您完成相同的任务。
模式的问题在于,根据设计,任何时候只能有一个实例(想想单例)。所以每次你调用它,你都在调用同一个实例。所以...如果您尝试填充多个实例 - 它不会发生。将仅应用或最后一个数据集。
使用问题
因为您选择了页面上的所有模式并全部显示。
$('.modal').css('display', 'block');
您没有选择与您选择的内容相对应的模式。在您的情况下,模式位于图像旁边,因此请抓住下一个元素并显示它。
$(this).next('.modal').css('display', 'block');
人们倾向于做的其他选择是数据属性和 ID。您添加一个数据属性,该属性具有您要显示的项目的 ID。因此,您阅读了属性,然后显示了该项目。
<img class="img-for-modal" src="media/products-image/1.jpg" data-toggles="#modal1">
<div class="modal" id="modal1">
比JavaScript还要看属性
var selector = $(this).data("toggles")
$(selector).css('display', 'block');