如何在foreach循环中对每个产品单独应用评级系统
How to apply rating system in foreach loop for every product individually?
我在foreach循环中有一个产品目录,我的产品id是:
$productArray[$key]["ID"]
我有一个评分系统,但我找不到如何将其单独应用于每个产品的解决方案,因为现在当我在一个产品中选择明星时,其他明星也会被选中。
<div class="rate-ex3-cnt" id="<?php echo $productArray[$key]["ID"];?>
<div id="1" value="1" class="rate-btn-1 rate-btn"></div>
<div id="2" value="2" class="rate-btn-2 rate-btn"></div>
<div id="3" value="3" class="rate-btn-3 rate-btn"></div>
<div id="4" value="4" class="rate-btn-4 rate-btn"></div>
<div id="5" value="5" class="rate-btn-5 rate-btn"></div>
</div>
<script>
// rating script
$(function(){
$('.rate-btn').hover(function(){
$('.rate-btn').removeClass('rate-btn-hover');
var therate = $(this).attr('id');
for (var i = therate; i >= 0; i--) {
$('.rate-btn-'+i).addClass('rate-btn-hover');
};
});
$('.rate-btn').click(function(){
var therate = $(this).attr('id');
var dataRate = 'act=rate&post_id=<?php echo $post_id; ?>&rate='+therate; //
$('.rate-btn').removeClass('rate-btn-active');
for (var i = therate; i >= 0; i--) {
$('.rate-btn-'+i).addClass('rate-btn-active');
};
$.ajax({
type : "POST",
url : "http://localhost/rating/ajax.php",
data: dataRate,
success:function(){}
});
});
});
</script>
问题是,您不是在.rate-exc3-nt项的上下文中,而是全局的。因此,您需要使用上下文来查找费率按钮。
//$(this).closest('.rate-ex3-cnt').find('.....') ...
这仅适用于悬停速率btn上下文的更改,而不适用于全局。
$('.rate-btn').hover(function(){
$(this).closest('.rate-ex3-cnt').find('.rate-btn').removeClass('rate-btn-hover');
var therate = $(this).attr('id');
for (var i = therate; i >= 0; i--) {
$(this).closest('.rate-ex3-cnt').find('.rate-btn-'+i).addClass('rate-btn-hover');
};
});
对于单击功能,也要执行相同的操作。更换$('.rate-btn').removeClass('...') with $(this).closest('.rate-ex3-cnt').find('.rate-btn').removeClass('...')
有2个问题
- id选择器->将始终为您获取与id匹配的第一个元素
- 用于添加/删除类的类->它将选择具有匹配类的所有元素,而不考虑评级块
解决方案
假设您有以下结构
<div class="rating">
<div data-value="1" class="rate-btn-1 rate-btn">1</div>
<div data-value="2" class="rate-btn-2 rate-btn">2</div>
<div data-value="3" class="rate-btn-3 rate-btn">3</div>
<div data-value="4" class="rate-btn-4 rate-btn">4</div>
<div data-value="5" class="rate-btn-5 rate-btn">5</div>
</div>
<div class="rating">
<div data-value="1" class="rate-btn-1 rate-btn">1</div>
<div data-value="2" class="rate-btn-2 rate-btn">2</div>
<div data-value="3" class="rate-btn-3 rate-btn">3</div>
<div data-value="4" class="rate-btn-4 rate-btn">4</div>
<div data-value="5" class="rate-btn-5 rate-btn">5</div>
</div>
然后,您可以将点击功能绑定到其父项,然后可以隔离产品的评级,如以下
$('.rating').click(function(event){
var value = $(event.target).data("value");
for (var i = value; i >= 0; i--) {
$(this).find('.rate-btn-'+i).css("color", "red");
}
});
供参考-http://plnkr.co/edit/G9bfvlBQjXZ3UUvwOv6a?p=preview
我认为您需要获取div的父id,因此它对所有产品都是唯一的,因此您可以针对产品的单个星
<script>
// rating script
$(function(){
$('.rate-btn').hover(function(){
var Id=$(this).parents(".rate-ex3-cnt").attr("id);//Take parent Id
$("#"+Id+ '.rate-btn').removeClass('rate-btn-hover');
var therate = $(this).attr('id');
for (var i = therate; i >= 0; i--) {
$("#"+Id+ '.rate-btn-'+i).addClass('rate-btn-hover');
};
});
$('.rate-btn').click(function(){
var Id=$(this).parents(".rate-ex3-cnt").attr("id); //Take Parent Id
var therate = $(this).attr('id');
var dataRate = 'act=rate&post_id=<?php echo $post_id; ?>&rate='+therate; //
$("#"+Id+ '.rate-btn').removeClass('rate-btn-active');
for (var i = therate; i >= 0; i--) {
$("#"+Id+ '.rate-btn-'+i).addClass('rate-btn-active');
};
$.ajax({
type : "POST",
url : "http://localhost/rating/ajax.php",
data: dataRate,
success:function(){}
});
});
});
</script>
相关文章:
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 如何使jQuery中的悬停函数单独应用于数据库映像
- 如何在foreach循环中对每个产品单独应用评级系统
- 如何单独对输入标签应用样式
- 获取动态背景颜色,使用 LESS 应用于单独的元素
- 开发两个单独的节点应用程序来提供 Web 服务和使用 Web 服务以在浏览器上呈现它是一个好主意吗?
- 如何链接到单独应用程序中的视图
- 为什么 Web 应用程序经常使用单独的模板语言来生成网页
- 谷歌应用脚本 - 将一些功能移动到单独的文件中
- 单独的导航栏 Ctrl 用于单页应用程序
- 如何最大化/最小化 Web 应用程序中 asp.net 单独的部分
- 如何拥有具有单独LocalStorage的单独Electron应用程序实例
- 如何为 cordova 应用程序创建一个单独的目录并在其中存储数据
- 需要哪种体系结构才能允许多个 Web 应用协同工作,这些应用可以单独更新
- 如何制作一个单独的html文件AngularJS应用程序
- 对两个单独的图元应用相同的切换
- Angular和Laravel应该是单独的应用程序,还是Laravel应提供Angular应用程序
- 如何访问node.js Express 2.5.5中单独路由文件中主应用程序.js中声明的变量
- express应用程序设置存储在单独的文件中
- 如何顺序/单独应用相同的函数对数组的对象