我正在尝试执行以下操作 - >我有一个动态数量的DIV
元素..所有堆叠如下:
__________________________________________
| |
| |
| DIV1 |
| |
__________________________________________
__________________________________________
| |
| |
| DIV2 |
| |
__________________________________________
__________________________________________
| |
| |
| DIV3 |
| |
__________________________________________
我在每个内部都有一个按钮,它调用相同的jQuery函数:
function updateProduct(old_q,ent_id,element){
var new_q = jQuery(element).prev().children('input').val();
jQuery.post('/ajax_calls/checkout/update_cart_item.php', {entity_id: ent_id,old_q: old_q,new_q: new_q}, function(data) {
cartItemOut = data;
alert(cartItemOut);
});
}
正如您所看到的,我使用jQuery来确定THIS
元素是什么,然后找到与孩子/父母等相关的输入。我的问题是,如何覆盖" loading&#34 ;考虑到我上面使用的代码来确定哪个 DIV
,DIV1
或 DIV2
DIV3
DIV
我在?以下是每个DIV
的基本结构:
<div class="item_wrapper">
<div style="float:left; width:100px; height:100px; margin-left:15px; position:relative;">
<div style="margin-top:100%;"></div>
<img width="100" height="69" src="/images/100/198.jpg" style="position:absolute; top: 0px; bottom: 0px; left: 0px; right: 0px; max-height:100%; max-width:100%; display:block; margin:auto;">
</div>
<div style="float:left; width:198px; margin-left:20px; margin-bottom:7px;">
<div style="height:31px; overflow:hidden; margin-bottom:2px;">
<span style="font-size:12px; font-weight:bold;">Name</span>
</div>
<br>
<span style="color:#86a057;">item#: </span>198<br>
<span style="color:#86a057;">price:</span>
<span style="color:#000; font-weight:bold;">$107.99</span><br>
<div style="width:300px; margin-top:10px;">
<div style="float:left; margin-top:4px; width:20px; margin-right:3px; color:#86a057;">qty: </div>
<div style="float:left; margin-right:15px;">
<input type="text" value="1" style="font-family:arial; font-size:13px; height:17px; margin-top:2px; width:30px; text-align: center;"></div>
<div onclick="updateProduct('1','198',this);" style="float:left; margin-right:7px; margin-top:3px; width:59px; height:20px; cursor:pointer;">
<img src="/skin/frontend/templat/default/images/update_cart.png">
</div>
<div style="float:left; margin-right:7px; margin-top:3px; width:59px; height:20px; cursor:pointer;">
<img src="/skin/frontend/template/default/images/remove_cart.png">
</div>
</div>
</div>
<div class="clearfix"></div>
</div>
所以从本质上讲,问题是我有多个DIV
与类item_wrapper
。当我点击updateProduct()
时,如何使用叠加层和加载程序图像覆盖那个 DIV
?我尝试的一切似乎都是徒劳的,我开始认为简单的领域是不可能的。我尝试过甚至变得像检测item_wrapper
的位置和WIDTH
/ HEIGHT
以及将FIXED
DIV
放在其上一样复杂,但是似乎不是正确的解决方案,必须有更好的方法。
答案 0 :(得分:1)
您可以使用绝对定位来遮盖元素。您可以增强以下示例。
<div class="ct">
<div class="x">
<input type="button" Value="Test" />
</div>
<div class="x">
<input type="button" Value="Test" />
</div>
<div class="x">
<input type="button" Value="Test" />
</div>
</div>
$('.ct').on('click', '.x input', function(e){
var target = $(e.target);
var div = target.closest('.x');
div.append('<div class="mask">mask</div>');
setTimeout(function(){
$('.mask', div).remove();
}, 2500);
});
.ct {
padding: 10px;
}
.x {
height: 50px;
margin-bottom: 10px;
border: 1px solid lightgrey;
position: relative;
}
.mask {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
opacity: .5;
background-color: lightblue;
}
演示:Fiddle
答案 1 :(得分:1)
您可以使用以下jQuery找到父div:
var itemWrapper = jQuery(element).parents('.item_wrapper');
然后,您可以将一些加载元素附加到该项目,并相应地定位和调整大小。
function updateProduct(old_q, ent_id, element) {
var new_q = jQuery(element).prev().children('input').val();
jQuery.post('/ajax_calls/checkout/update_cart_item.php', {entity_id: ent_id,old_q: old_q,new_q: new_q}, function(data) {
cartItemOut = data;
alert(cartItemOut);
$(element).find('.loading-overlay').remove();
});
var $ = jQuery, itemWrapper = $(element).parents('.item_wrapper'),
iHeight = itemWrapper.height(), iWidth = itemWrapper.width();
itemWrapper.prepend($('<div class="loading-overlay"><span>Loading...</span></div>').height(iHeight).width(iWidth));
}
看起来另一个答案已经提到了这一点,但你需要使用绝对定位来覆盖你的元素。
.loading-overlay {
position: absolute;
background: gray;
z-index: 1;
opacity: 0.5;
}
这是一个使用类似于你所获得的东西的小提琴:http://jsfiddle.net/Jeff_Meadows/dyPMG/3/