2017-09-20 32 views
2

我正在構建卡路里計算器,需要一些幫助來實現以下功能。Javascript - 用於飲食偏好的條件格式化

餐廳提供各種物品,並安排您的菜單項。例如,其中一些是素食主義者。如果某件商品是「純素」,我希望有一張圖片可以彈出,但如果顧客選擇了另一件不是「純素」的商品,那麼圖片就會消失或者變灰。

我設法建立了這樣的熱量計數,但我不知道做後者的最佳方法是什麼。這是我的Javascript代碼。

$(document).ready(function() { 

$('.ingredient').click(function() { 

    var totalNum = $('#total'); 
    var totalCarbs = $('#totalCarbs'); 
    var totalFats = $('#totalFats'); 
    var totalProteins = $('#totalProteins'); 
    var pressed = $(this).data('pressed'); 
    var currentCalories = +totalNum.html(); 
    var currentCarbs = +totalCarbs.html(); 
    var currentFats = +totalFats.html(); 
    var currentProteins = +totalProteins.html(); 

    if (pressed) { 
     $(this).removeClass('clicked'); 
     var calories = $(this).data('calories'); 
     var carbs = $(this).data('carbs'); 
     var fat = $(this).data('fat'); 
     +totalNum.html(currentCalories - calories); 
     +totalCarbs.html(currentCarbs - carbs); 
     +totalFats.html(currentFats - fat); 
     +totalProteins.html(currentProteins - proteins); 


    } else { 
     $(this).addClass('clicked'); 
     var calories = $(this).data('calories'); 
     var carbs = $(this).data('carbs'); 
     var fat = $(this).data('fat'); 
     var proteins = $(this).data('fat'); 
     +totalNum.html(currentCalories + calories); 
     +totalCarbs.html(currentCarbs + carbs); 
     +totalFats.html(currentFats + fat); 
     +totalProteins.html(currentProteins + fat); 
    } 

    $(this).data("pressed", !pressed); 

    }); 

}); 

var vegan = $(this).data('vegan') 

if (vegan === true) 
{ 
document.write("This is Vegan!") 
} 
else 
{ 
document.write("This is not Vegan!") 
}; 

和HTML

<!DOCTYPE html> 
 
<html > 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>padthai wokbar calorie counter</title> 
 
    
 
    
 
    
 
     <link rel="stylesheet" href="css/style.css"> 
 

 
    
 
</head> 
 

 
<body> 
 
    <div class="header"> 
 
\t <img src="http://blog.padthaiwokbar.com/wp-content/uploads/2017/09/logofinal.png" alt="padthai wokbar" style="width:300px;"> 
 
\t <h1>How did you build your bowl?</h1> 
 
\t <p>Select all the ingredients you added to your padthai wokbar meal and we'll do the rest.</p> 
 
\t <br> 
 

 

 
<div class="ingredients"> 
 

 
    
 
    
 
    <h2>Bases</h2> 
 
\t <div class="ingredient" data-calories="300" data-carbs="150" data-fat="250" data-proteins="150" data-vegan="true" > 
 
\t \t <p>Rice Noodles 
 
\t \t \t <p> 
 
       
 
       </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250" data-vegan="False"> 
 
\t \t <p>Egg Noodles 
 
\t \t \t <p> 
 
       </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Vermicelli 
 
\t \t \t <p> 
 
       
 
       </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Whole Grain Noodle 
 
\t \t \t <p> 
 
      </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>White Rice 
 
\t \t \t <p> 
 
    </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Brown Rice 
 
\t \t \t <p> 
 
    </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Vegetable Base 
 
\t \t \t <p> 
 
       </div> 
 
       
 
       
 
\t <h2>Proteins</h2> 
 
\t <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Chicken 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="250" data-carbs="250"> 
 
\t \t <p>Pork 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="500" data-carbs="250"> 
 
\t \t <p>Smoked Tofu 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="250" data-carbs="250"> 
 
\t \t <p>Beef 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="450" data-carbs="250"> 
 
\t \t <p>Duck 
 
\t \t \t <p> 
 
\t </div> 
 
    
 
    <div class="ingredient" data-calories="450" data-carbs="250"> 
 
\t \t <p>Prawns 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <h2>Toppings</h2> 
 

 
\t <div class="ingredient" data-calories="450" data-carbs="250"> 
 
\t \t <p>Vegetable Mix 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="50" data-carbs="250"> 
 
\t \t <p>Cashew 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="20" data-carbs="250"> 
 
\t \t <p>Sweet Peppers Mix 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="60" data-carbs="250"> 
 
\t \t <p>Wood Ear Mushroom 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="70" data-carbs="250"> 
 
\t \t <p>Mushroom 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="50" data-carbs="250"> 
 
\t \t <p>Pineapple 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Bamboo Shots 
 
\t \t \t <p> 
 
\t </div> 
 
    
 
    <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Chinese Cabbage 
 
\t \t \t <p> 
 
\t </div> 
 
    
 
    
 

 
\t <h2>Warm Sauces</h2> 
 

 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Thailand-Padthai 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Chinese Sweet and Sour 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Burma- Green Curry 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Indonesia- Satay 
 
\t \t \t <p> 
 
\t </div> 
 
    <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Laosz- Red Curry 
 
\t \t \t <p> 
 
\t </div> 
 
    <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Japan- Teriyaki 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <h2>Extra Toppings</h2> 
 

 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Roasted Peanut 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Coriander 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Sesame Seed 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Basil 
 
\t \t \t <p> 
 
\t </div> 
 
    <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Coconut Chips 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <h2>Desserts</h2> 
 

 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Cumin Lemon Vinaigrette 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Honey Cilantro Vinaigrette 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="total"> 
 
\t \t Total calories: <span id="total"></span> 
 
     Total Carbs:<span id="totalCarbs"></span> 
 
     Total Fat:<span id="totalFats"></span> 
 
     Total Protein:<span id="totalProteins"></span> 
 
     
 
\t </div> 
 

 
</div> 
 
    <script src='https://code.jquery.com/jquery-2.2.4.min.js'></script> 
 

 
    <script src="js/index.js"></script> 
 

 
</body> 
 
</html>

所有我需要的真的是一個例子,如何做到這一點或一些提示。

+0

什麼是'+'經營者面前的功能,例如,'+ totalFats.html(currentFats - 脂肪);'?至於你的問題:用聲明'display:none'定義一個CSS選擇器。如果要隱藏圖像,請將其添加到圖像中,然後將其刪除以顯示圖像。或者使用JQuery的'.show()'和'.hide()'。 –

回答

2

你想要這樣的東西嗎?

基本上我把移動的部分計算出它的內部點擊函數是vegan還是non-veg。然後我改變了檢查該屬性是否存在的邏輯,最後我在一些輸出元素中添加了圖像和文本。

測試:

請注意,只有與內容Coconut Chips股利是有純素的屬性。所以用它來測試!

$(document).ready(function() { 
 

 
$('.ingredient').click(function() { 
 

 
    var totalNum = $('#total'); 
 
    var totalCarbs = $('#totalCarbs'); 
 
    var totalFats = $('#totalFats'); 
 
    var totalProteins = $('#totalProteins'); 
 
    var pressed = $(this).hasClass('clicked'); 
 
    var currentCalories = +totalNum.html(); 
 
    var currentCarbs = +totalCarbs.html(); 
 
    var currentFats = +totalFats.html(); 
 
    var currentProteins = +totalProteins.html(); 
 

 
    if (pressed) { 
 
     $(this).removeClass('clicked'); 
 
     var calories = $(this).data('calories'); 
 
     var carbs = $(this).data('carbs'); 
 
     var fat = $(this).data('fat'); 
 
     +totalNum.html(currentCalories - calories); 
 
     +totalCarbs.html(currentCarbs - carbs); 
 
     +totalFats.html(currentFats - fat); 
 
     +totalProteins.html(currentProteins - proteins); 
 

 

 
    } else { 
 
     $(this).addClass('clicked'); 
 
     var calories = $(this).data('calories'); 
 
     var carbs = $(this).data('carbs'); 
 
     var fat = $(this).data('fat'); 
 
     var proteins = $(this).data('fat'); 
 
     +totalNum.html(currentCalories + calories); 
 
     +totalCarbs.html(currentCarbs + carbs); 
 
     +totalFats.html(currentFats + fat); 
 
     +totalProteins.html(currentProteins + fat); 
 
    } 
 

 
    var attr = $(this).attr('vegan'); 
 
    console.log(attr); 
 
    if (typeof attr !== typeof undefined && attr !== false) 
 
    { 
 
    $('#type').text("This is Vegan!") 
 
    $('#typeImage').attr("src", "https://upload.wikimedia.org/wikipedia/hi/thumb/b/b2/Veg_symbol.svg/768px-Veg_symbol.svg.png"); 
 
    } 
 
    else 
 
    { 
 
    $('#type').text("This is not Vegan!") 
 
    $('#typeImage').attr("src", "http://www.hellocurry.com/images/nonveg_icon.png"); 
 
    }; 
 
    }); 
 

 
});
.clicked{ 
 
border: 1px solid red; 
 
}
<!DOCTYPE html> 
 
<html > 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>padthai wokbar calorie counter</title> 
 
    
 
    
 
    
 
     <link rel="stylesheet" href="css/style.css"> 
 

 
    
 
</head> 
 

 
<body> 
 
    <div class="header"> 
 
\t <img src="http://blog.padthaiwokbar.com/wp-content/uploads/2017/09/logofinal.png" alt="padthai wokbar" style="width:300px;"> 
 
\t <h1>How did you build your bowl?</h1> 
 
\t <p>Select all the ingredients you added to your padthai wokbar meal and we'll do the rest.</p> 
 
\t <br> 
 

 

 
<div class="ingredients"> 
 

 
    
 
    
 
    <h2>Bases</h2> 
 
\t <div class="ingredient" data-calories="300" data-carbs="150" data-fat="250" data-proteins="150" data-vegan="true" > 
 
\t \t <p>Rice Noodles 
 
\t \t \t <p> 
 
       
 
       </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250" data-vegan="False"> 
 
\t \t <p>Egg Noodles 
 
\t \t \t <p> 
 
       </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Vermicelli 
 
\t \t \t <p> 
 
       
 
       </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Whole Grain Noodle 
 
\t \t \t <p> 
 
      </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>White Rice 
 
\t \t \t <p> 
 
    </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Brown Rice 
 
\t \t \t <p> 
 
    </div> 
 
    <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Vegetable Base 
 
\t \t \t <p> 
 
       </div> 
 
       
 
       
 
\t <h2>Proteins</h2> 
 
\t <div class="ingredient" data-calories="300" data-carbs="250"> 
 
\t \t <p>Chicken 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="250" data-carbs="250"> 
 
\t \t <p>Pork 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="500" data-carbs="250"> 
 
\t \t <p>Smoked Tofu 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="250" data-carbs="250"> 
 
\t \t <p>Beef 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="450" data-carbs="250"> 
 
\t \t <p>Duck 
 
\t \t \t <p> 
 
\t </div> 
 
    
 
    <div class="ingredient" data-calories="450" data-carbs="250"> 
 
\t \t <p>Prawns 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <h2>Toppings</h2> 
 

 
\t <div class="ingredient" data-calories="450" data-carbs="250"> 
 
\t \t <p>Vegetable Mix 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="50" data-carbs="250"> 
 
\t \t <p>Cashew 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="20" data-carbs="250"> 
 
\t \t <p>Sweet Peppers Mix 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="60" data-carbs="250"> 
 
\t \t <p>Wood Ear Mushroom 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="70" data-carbs="250"> 
 
\t \t <p>Mushroom 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="50" data-carbs="250"> 
 
\t \t <p>Pineapple 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Bamboo Shots 
 
\t \t \t <p> 
 
\t </div> 
 
    
 
    <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Chinese Cabbage 
 
\t \t \t <p> 
 
\t </div> 
 
    
 
    
 

 
\t <h2>Warm Sauces</h2> 
 

 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Thailand-Padthai 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Chinese Sweet and Sour 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Burma- Green Curry 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Indonesia- Satay 
 
\t \t \t <p> 
 
\t </div> 
 
    <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Laosz- Red Curry 
 
\t \t \t <p> 
 
\t </div> 
 
    <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Japan- Teriyaki 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <h2>Extra Toppings</h2> 
 

 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Roasted Peanut 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Coriander 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Sesame Seed 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Basil 
 
\t \t \t <p> 
 
\t </div> 
 
    <div class="ingredient" data-calories="40" data-carbs="250" vegan> 
 
\t \t <p>Coconut Chips 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <h2>Desserts</h2> 
 

 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Cumin Lemon Vinaigrette 
 
\t \t \t <p> 
 
\t </div> 
 
\t <div class="ingredient" data-calories="40" data-carbs="250"> 
 
\t \t <p>Honey Cilantro Vinaigrette 
 
\t \t \t <p> 
 
\t </div> 
 

 
\t <div class="total"> 
 
\t \t Total calories: <span id="total"></span> 
 
     Total Carbs:<span id="totalCarbs"></span> 
 
     Total Fat:<span id="totalFats"></span> 
 
     Total Protein:<span id="totalProteins"></span> 
 
     
 
    <br> 
 
    <img id="typeImage" src="" height="50" width="50" alt="Select Something!"/> 
 
    <span id="type"></span> 
 
\t </div> 
 

 
</div> 
 
    <script src='https://code.jquery.com/jquery-2.2.4.min.js'></script> 
 

 
    <script src="js/index.js"></script> 
 

 
</body> 
 
</html>

+0

是的納蘭謝謝!就是這樣!好吧,現在我所缺少的是,如果我多次點擊一個項目,它會一直添加卡路里,而不是在點擊後扣除(你應該只能添加一次,然後刪除它們)。你知道什麼可能造成這種情況? – Pbalazs89

+0

@ Pbalazs89我改變了邏輯,你能確認你想要什麼嗎? –

+0

是的非常感謝你!祝你有美好的一天! – Pbalazs89