Onclick事件只对第一个产品起作用,对其他获取的数据不起作用
onclick event works only on first product it doesn't work on other fetched data
我正在开发购物车在codeigniter,我从数据库中获取数据,当用户点击添加到购物车的数据与当前项目是由用户点击得到存储在jQuery变量现在我面临的问题,onclick事件只适用于第一次获取的项目和在其余的它不会工作,我很困惑为什么它不工作。这是我的代码。
<div class="col-md-9" >
<?php if(isset($products))
{
foreach($products as $row)
{
?>
<div class="row" >
<div class="col-md-4" id="con">
<div class="product">
<a href="products/<?=$row->sub_c_id?>/<?=$row->pid?>">
<img id="imgslct" alt="<?=$row->pname?>" height="173" width="144" src="<?php echo base_url(); ?>uploads/<?=$row->product_pic?>">
</a>
<div class="name">
<a href="#" id="pname"><?=$row->pname?></a>
</div>
<div class="price">
<p id="price">price : <?=$row->pprice?></p>
<input type="hidden" id="pquan" value="<?=$row->pquantity;?>">
<button id="addtocart" class="btn btn-lg btn-default">Add to cart</button>
</div>
</div>
</div>
<?php
}
} ?>
JQuery代码
<script type="text/javascript">
$(document).ready(function() {
var counter=0;
$("#con").on('click',function(){
counter++;
var pic=$(this).find("img").attr('src');
alert(pic);
var imgdata= $(this).find("#pname").text();
var productquantity= $('#pquan').val();
var productid=$('#pid').text();
var price=$("#price").text();
var qty="1";
var session_id="<?=$this->session->userdata('session_id');?>";
var pid="1";
$("#counter").text(counter);
var counting= $("#counter").text(counter);
<?php $counting=''?>+counting;
alert(counting);
<?php $new_data=array('counter' => $counting ) ?>
if(qty=="")
{
alert("no quantity added");
return false;
}
$.ajax({
type:"post",
url:"<?=base_url();?>temp_upload",
data:"pic="+pic+"&imgdata="+imgdata+"&productquantity="+productquantity+"&productid="+productid+"&price="+price+"&qty="+qty+"&session_id="+session_id+"&pid="+pid,
success: function(data)
{
alert(data);
$("#uploaded").html();
}
});
$("#newdata").append('<tr><td class="image"><img alt="IMAGE" class="img-responsive" src="'+pic+'"></td><td class="name"><a href="project.html">Black Dress</a></td><td class="quantity">x 3</td><td class="total">'+price+'</td><td class="remove"><img src="'+pic+'" alt="Remove" title="Remove"></td></tr>');
});
});
</script>
id必须唯一
当您将id更改为类(#con
-> .con
)并适当修改代码时,它们都将被选中。
请看下面的例子:http://jsfiddle.net/shomz/38PB2/
您处于一个循环中,该循环一遍又一遍地使用相同的id
, id="con"
是第一个。由于id在DOM中必须是唯一的,因此您需要将它们从id更改为类。
你应该这样做:
<div class="col-md-4 con">
<div class="product">
<a href="products/<?=$row->sub_c_id?>/<?=$row->pid?>">
<img class="imgslct" alt="<?=$row->pname?>" height="173" width="144" src="<?php echo base_url(); ?>uploads/<?=$row->product_pic?>">
</a>
<div class="name">
<a href="#" class="pname"><?=$row->pname?></a>
</div>
<div class="price">
<p>price : <?=$row->pprice?></p>
<input type="hidden" class="pquan" value="<?=$row->pquantity;?>">
<button class="addtocart btn btn-lg btn-default">Add to cart</button>
</div>
</div>
</div>
然后将JavaScript的开头改为:
$(".con").on('click', function ()
{
counter++;
var $this = $(this);
var pic = $this.find("img").attr('src');
var imgdata = $this.find(".pname").text();
var productquantity = $this.find('.pquan').val();
var productid = $this.find('.pid').text();
var price = $this.find(".price").text();
var qty = "1";
var session_id = "<?=$this->session->userdata('session_id');?>";
var pid = "1";
首先将事件附加到class上而不是id上,因为id必须是唯一的,如果您将click事件附加到id上,则只有具有该id的第一个元素才会触发该事件
改变 <div class="col-md-4" id="con">
<div class="col-md-4 con" >
在div中还有一个link标签这会造成一些问题直到事件停止传播
则可以使用
将click事件添加到获取的元素中 $(document).on('click','.con',function(){
/// your code
});
所以click event也会附加到新元素上
相关文章:
- 如何在My chrome扩展中获取其他chrome扩展的DOM访问权限
- jQuery代码,用于在检查行时获取其他列的数据
- jQuery获取其他标签's css并将其添加到其他
- 使用jquery获取其他域名网站的源代码
- 获取锚点中的文本值,但不获取其他 HTML 元素
- 如何将数据(如用户 ID)传递给 Web 工作人员,以便从服务器获取其他推送通知数据
- 如何获取其他 Chrome 事件中的所有标签页网址
- 通过在数组中输入其他值,从 JSON 数据中获取其他值
- 暂停nodejs函数以获取其他函数的响应
- 从select ng选项中获取其他列
- getElemetById 总是返回第一个对象,我如何获取其他值
- 从另一个值中获取其他json值
- 如何获取其他时区的本地时间
- 获取其他页面的内容
- 在解析xml时,getAttribute获取某些项而不获取其他项
- 从表中的其他td获取其他值
- 通过JQuery获取其他网页的html源/文本
- 使用data attr value获取其他data attr值
- jQuery可以获取某些类,但不能获取其他类
- FuelUX ComboBox获取“其他”的值;选择