如何根据单击访问相应对象的值
How to access a corresponding object's value according to the click
这是JSFiddle中的示例
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<div></div>
JavaScript:
function Produit(nom, prix){
this.nom = nom;
this.prix = prix;
};
var apple = new Produit("apple", 0.30);
var banana = new Produit("banana", 0.03);
var pear = new Produit("pear", 0.35);
var kiwi = new Produit("kiwi", 0.40);
var produit = [apple,banana,pear,kiwi];
for(var i = 0; i < produit.length; i++){
$('a').eq(i).html(produit[i].nom + '<br/>');
};
$('a').click(function(){
var quantity = 0;
quantity++;
$('div').append(produit[0].nom + ' x ' + quantity + '<br/>');
});
所以在浏览器中,我们有四种水果。我想要的是:
- 当我点击一个水果时,它会显示它的名称和数量,
- 如果我点击苹果 2 次,它会显示"苹果 x 2",
- 然后,如果我单击猕猴桃,它将在"Apple x 2"
下显示"猕猴桃x 1"由于我不知道该怎么做,在我的代码中,我只是放置了表的 0 索引,以向您展示它的外观。
我所知道的是:
- 对于 1,我需要一个this
来替换produit[ ]
中的0
,但我不知道如何应用this
.
- 对于 2,我需要一个计数器和一个if/else
,为了进行比较,一旦点击水果,第二次点击它会增加数量,而不是附加新的<div>
。
- 对于 3,它将与 #2 在else
中,当水果不匹配时,请执行append
。
我会稍微简化这个问题,方法是向 Produit 对象添加一个数量并向每个链接添加一个 ID。您可以使用 $(this).text() 访问每个链接的文本值,但 ID 将更可靠,并使代码更简单。我不确定您是否关心产品在您的部门列表中显示的顺序......下面的解决方案只是遍历您的产品数组,并显示所有大于 0 的产品数量。
function Produit(nom, prix, qty){
this.nom = nom;
this.prix = prix;
this.qty = qty;
};
var apple = new Produit("apple", 0.30, 0);
var banana = new Produit("banana", 0.03, 0);
var pear = new Produit("pear", 0.35, 0);
var kiwi = new Produit("kiwi", 0.40, 0);
var produit = [apple,banana,pear,kiwi];
for(var i = 0; i < produit.length; i++){
$('a').eq(i).html(produit[i].nom + '<br/>').attr("id","produit_"+i);
};
$('a').click(function(){
var id = $(this).attr("id").replace("produit_","");
produit[id].qty++;
var div = '';
for(var i = 0; i<produit.length; i++){
if(produit[i].qty>0)
div += produit[i].nom + ' x ' + produit[i].qty + '<br/>'
}
$('div').html(div);
});
如果您只想附加项目的当前数量,则可以这样做:
$('a').click(function(){
var id = $(this).attr("id").replace("produit_","");
produit[id].qty++;
$('div').append(produit[id].nom + ' x ' + produit[id].qty + '<br />')
});
您需要将结果写入数组,然后重写div 内容。 使用.html()
而不是.append()
function Produit(nom, prix){
this.nom = nom;
this.prix = prix;
};
var apple = new Produit("apple", 0.30);
var banana = new Produit("banana", 0.03);
var pear = new Produit("pear", 0.35);
var kiwi = new Produit("kiwi", 0.40);
var produit = [apple,banana,pear,kiwi];
for(var i = 0; i < produit.length; i++){
$('a').eq(i).html(produit[i].nom + '<br/>');
};
a = {};
a.nameArray = [];
a.valueArray = [];
myString = "";
$('a').click(function(){
var itemClicked = this.innerHTML.replace("<br>","");
//if the nameArray does NOT contain the product, add it, and set value to 1. If it does contain the product, increment value by 1.
if(a.nameArray.indexOf(itemClicked)==-1){
a.nameArray.push(itemClicked);
a.valueArray.push(1);
} else {
a.valueArray[a.nameArray.indexOf(itemClicked)] += 1;
}
//write the string based on contents of arrays
myString = "";
for(var i=0; i<a.nameArray.length;i++){
myString += a.nameArray[i] + " x " + a.valueArray[i] + "<br/>";
}
//Rewrite the contents of the html div.
$('div').html(myString);
});
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<div></div>
https://jsfiddle.net/s02ch9mt/1/
首先,我将向 Produit 类添加一个"quantity"属性并将其初始化为零。
function Produit(nom, prix){
this.nom = nom;
this.prix = prix;
this.qty = 0;
};
现在,您可以通过每次点击更改此产品管道的数量:
$('a').click(function(){
$('div').append(produit[0].nom + ' x ' + produit[0].qty + '<br/>');
};
让我知道这是否适合您!
- 阿达
假设每个元素都有一个属性,使其具有自己的数量计数您可以为当前单击的元素提供"this"
在定位元素中使用计数属性对数量进行计数以及您在此处更新的代码
<a href="#" count=0></a>
<a href="#" count=0></a>
<a href="#" count=0></a>
<a href="#" count=0></a>
<div></div>
和JavaScript:
function Produit(nom, prix){
this.nom = nom;
this.prix = prix;
};
var apple = new Produit("apple", 0.30);
var banana = new Produit("banana", 0.03);
var pear = new Produit("pear", 0.35);
var kiwi = new Produit("kiwi", 0.40);
var produit = [apple,banana,pear,kiwi];
for(var i = 0; i < produit.length; i++){
$('a').eq(i).html(produit[i].nom + '<br/>');
};
$('a').click(function(){
var currentElement = $(this);
var quantity = currentElement.attr('count');
quantity++;
currentElement.attr('count',quantity);
$('div').append(currentElement.text() + ' x ' + quantity + '<br/>');
});
jSfiddle
您可以使用过滤器功能,例如:
function Produit(nom, prix){
this.nom = nom;
this.prix = prix;
this.quantity = 0;
};
var apple = new Produit("apple", 0.30);
var banana = new Produit("banana", 0.03);
var pear = new Produit("pear", 0.35);
var kiwi = new Produit("kiwi", 0.40);
var produit = [apple,banana,pear,kiwi];
$(function () {
for(var i = 0; i < produit.length; i++){
$('a').eq(i).text(produit[i].nom).append('<br>');
// create the elements and set visibility to none
$('div').append('<p id="' + produit[i].nom + '" style="display:none;">' + produit[i].nom + ' x ' + produit[i].quantity + '</p>');
};
$('a').click(function(e){
// get the selected fruit object from produit
var objSelected = produit.filter(function(val, index) {
return val.nom == e.target.textContent;
});
var para = $('#' + objSelected[0].nom);
if (para.length == 1) {
para.text(objSelected[0].nom + ' x ' + objSelected[0].quantity).toggle(true);
}
objSelected[0].quantity += 1;
});
});
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
<div></div>
相关文章:
- 如何使用此从对象访问构造函数
- LokiJS与标准Javascript对象访问
- JavaScript子对象访问自己的值
- Javascript嵌套对象访问根级别
- 即使使用 angular.fromJson() 也无法从 json 对象访问字符串
- 从表单到 Ajax 的动态对象访问
- 将 NodeJS 模块范围变量作为对象访问
- 能够从Meteor中的辅助对象访问特定值
- 从JavaScript对象访问数据's数组成员变量
- 如何从 React 中的事件对象访问自定义属性
- 函数中的对象访问;不起作用
- 如何在javascript中从JSON对象访问数组
- 如何从C#.Net Webbrowser对象访问javascript变量
- Javascript中最快的类/对象访问/实例化是什么
- 覆盖对象访问 JavaScript
- 如何从 jquery 中的另一个对象访问在一个对象中声明的变量
- 从 JavaScript 对象访问变量
- 如何从范围对象访问数据到指令
- 从vue.js中的对象访问v-repeat-overarray中的属性
- jQuery:从具有一个类的多个实例的对象访问元素