添加并用 3 个选择替换总和
Add and replace sum with 3 selects
我想构建一个带有 3 个选项的小型票证计算器,这些选项在选择下拉菜单时实时加起来为一个总和。
$(document).ready(function() {
$package = 0;
$('#package-selection select').each(function(e) {
$(this).on('change', function(e) {
//console.log( this.value );
//console.log( $(this).find(":selected").text() );
$package = this.value * parseInt($(this).find(":selected").text());
console.log($package);
updateCount();
});
});
$sum = 0;
function updateCount() {
$sum = $package;
$('#sum').attr("value", "€ " + $sum +",-");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="package-selection">
<h3>Choose Package</h3>
<label for="tickets-Festivalpackage">Festivalpackage € 50,-</label>
<select class="form-control" name="tickets-Festivalpackage">
<option value="50">0</option>
<option value="50">1</option>
<option value="50">2</option>
<option value="50">3</option>
<option value="50">4</option>
<option value="50">5</option>
</select><br>
<label for="tickets-Friday">Friday € 30,-</label>
<select class="form-control" name="tickets-Friday">
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select><br>
<label for="tickets-Saturday">Saturday € 30,-</label>
<select class="form-control" name="tickets-Saturday">
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select>
</div>
<br>
<br>
<input style="background: none; border: none; outline: none;" type="text" readonly="readonly" id="sum" name="sum" value="€ 0,-"/>
我不知道将值相加为一个总和的最佳方法是什么。
例如示例计算可以是:
2 张门票 "Festivalpackage"(50 欧元,-)
3 张门票 "Saturday"(30 欧元,-)
总和:190,-
作为旁注:下拉菜单是从后端动态构建的,并以这种方式出现。
.each()
循环需要在 change
处理程序内部,而不是围绕它。当您更改任何下拉菜单时,您想要遍历所有这些并将它们的值添加到包总计中。
顺便说一句,Javascript 不是 PHP,您不需要以 $
.
开头的变量名
$(document).ready(function() {
$('#package-selection select').on('change', function(e) {
var $package = 0;
$("#package-selection select").each(function() {
$package += this.value * parseInt($(this).find(":selected").text());
});
updateCount($package);
});
function updateCount($sum) {
$('#sum').attr("value", "€ " + $sum + ",-");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="package-selection">
<h3>Choose Package</h3>
<label for="tickets-Festivalpackage">Festivalpackage € 50,-</label>
<select class="form-control" name="tickets-Festivalpackage">
<option value="50">0</option>
<option value="50">1</option>
<option value="50">2</option>
<option value="50">3</option>
<option value="50">4</option>
<option value="50">5</option>
</select><br>
<label for="tickets-Friday">Friday € 30,-</label>
<select class="form-control" name="tickets-Friday">
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select><br>
<label for="tickets-Saturday">Saturday € 30,-</label>
<select class="form-control" name="tickets-Saturday">
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select>
</div>
<br>
<br>
<input style="background: none; border: none; outline: none;" type="text" readonly="readonly" id="sum" name="sum" value="€ 0,-" />
无需向每个 select
标记添加事件侦听器,您可以在对任何选择应用更改时循环遍历所选选项。
像这样:
$(document).ready(function() {
// Target any <select> tag in given container.
$('#package-selection select').on('change', function() {
// Define a starting total of 0
var total = 0;
// Loop through all selected options
$('#package-selection select option:selected').map(function() {
var quantity = parseInt($(this).text(), 10) || 0;
var price = this.value;
// Add calculated price to our total
total += this.value * quantity;
});
// Change the price's value
$('#sum').attr('value', "€ " + total +",-");
});
});
我想这可以进一步优化,但作为一个起点应该足够了。 Running fiddle 如果需要。
首先,使用 change()
函数在每个 select-box
上捕获 change
事件。其次,使用 each()
函数遍历每个 select-box
,如果它发生变化,则将每个 select-box
的值和价格相乘,然后添加到 $package
变量中。最后 - 通过调用 updateCount
函数更新整个价格。
$(document).ready(function() {
$('.form-control').change(function() {
$package = 0;
$('.form-control').each(function() {
$package += $(this).find(":selected").text() * $(this).find(":selected").val();
});
updateCount();
});
function updateCount() {
$sum = $package;
$('#sum').attr("value", "€ " + $sum + ",-");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="package-selection">
<h3>Choose Package</h3>
<label for="tickets-Festivalpackage">Festivalpackage € 50,-</label>
<select class="form-control" name="tickets-Festivalpackage" id='package'>
<option value="50">0</option>
<option value="50">1</option>
<option value="50">2</option>
<option value="50">3</option>
<option value="50">4</option>
<option value="50">5</option>
</select><br>
<label for="tickets-Friday">Friday € 30,-</label>
<select class="form-control" name="tickets-Friday" id='friday'>
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select><br>
<label for="tickets-Saturday">Saturday € 30,-</label>
<select class="form-control" name="tickets-Saturday" id='saturday'>
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select>
</div>
<br>
<br>
<input style="background: none; border: none; outline: none;" type="text" readonly="readonly" id="sum" name="sum" value="€ 0,-" />
我想构建一个带有 3 个选项的小型票证计算器,这些选项在选择下拉菜单时实时加起来为一个总和。
$(document).ready(function() {
$package = 0;
$('#package-selection select').each(function(e) {
$(this).on('change', function(e) {
//console.log( this.value );
//console.log( $(this).find(":selected").text() );
$package = this.value * parseInt($(this).find(":selected").text());
console.log($package);
updateCount();
});
});
$sum = 0;
function updateCount() {
$sum = $package;
$('#sum').attr("value", "€ " + $sum +",-");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="package-selection">
<h3>Choose Package</h3>
<label for="tickets-Festivalpackage">Festivalpackage € 50,-</label>
<select class="form-control" name="tickets-Festivalpackage">
<option value="50">0</option>
<option value="50">1</option>
<option value="50">2</option>
<option value="50">3</option>
<option value="50">4</option>
<option value="50">5</option>
</select><br>
<label for="tickets-Friday">Friday € 30,-</label>
<select class="form-control" name="tickets-Friday">
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select><br>
<label for="tickets-Saturday">Saturday € 30,-</label>
<select class="form-control" name="tickets-Saturday">
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select>
</div>
<br>
<br>
<input style="background: none; border: none; outline: none;" type="text" readonly="readonly" id="sum" name="sum" value="€ 0,-"/>
我不知道将值相加为一个总和的最佳方法是什么。
例如示例计算可以是: 2 张门票 "Festivalpackage"(50 欧元,-) 3 张门票 "Saturday"(30 欧元,-) 总和:190,-
作为旁注:下拉菜单是从后端动态构建的,并以这种方式出现。
.each()
循环需要在 change
处理程序内部,而不是围绕它。当您更改任何下拉菜单时,您想要遍历所有这些并将它们的值添加到包总计中。
顺便说一句,Javascript 不是 PHP,您不需要以 $
.
$(document).ready(function() {
$('#package-selection select').on('change', function(e) {
var $package = 0;
$("#package-selection select").each(function() {
$package += this.value * parseInt($(this).find(":selected").text());
});
updateCount($package);
});
function updateCount($sum) {
$('#sum').attr("value", "€ " + $sum + ",-");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="package-selection">
<h3>Choose Package</h3>
<label for="tickets-Festivalpackage">Festivalpackage € 50,-</label>
<select class="form-control" name="tickets-Festivalpackage">
<option value="50">0</option>
<option value="50">1</option>
<option value="50">2</option>
<option value="50">3</option>
<option value="50">4</option>
<option value="50">5</option>
</select><br>
<label for="tickets-Friday">Friday € 30,-</label>
<select class="form-control" name="tickets-Friday">
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select><br>
<label for="tickets-Saturday">Saturday € 30,-</label>
<select class="form-control" name="tickets-Saturday">
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select>
</div>
<br>
<br>
<input style="background: none; border: none; outline: none;" type="text" readonly="readonly" id="sum" name="sum" value="€ 0,-" />
无需向每个 select
标记添加事件侦听器,您可以在对任何选择应用更改时循环遍历所选选项。
像这样:
$(document).ready(function() {
// Target any <select> tag in given container.
$('#package-selection select').on('change', function() {
// Define a starting total of 0
var total = 0;
// Loop through all selected options
$('#package-selection select option:selected').map(function() {
var quantity = parseInt($(this).text(), 10) || 0;
var price = this.value;
// Add calculated price to our total
total += this.value * quantity;
});
// Change the price's value
$('#sum').attr('value', "€ " + total +",-");
});
});
我想这可以进一步优化,但作为一个起点应该足够了。 Running fiddle 如果需要。
首先,使用 change()
函数在每个 select-box
上捕获 change
事件。其次,使用 each()
函数遍历每个 select-box
,如果它发生变化,则将每个 select-box
的值和价格相乘,然后添加到 $package
变量中。最后 - 通过调用 updateCount
函数更新整个价格。
$(document).ready(function() {
$('.form-control').change(function() {
$package = 0;
$('.form-control').each(function() {
$package += $(this).find(":selected").text() * $(this).find(":selected").val();
});
updateCount();
});
function updateCount() {
$sum = $package;
$('#sum').attr("value", "€ " + $sum + ",-");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="package-selection">
<h3>Choose Package</h3>
<label for="tickets-Festivalpackage">Festivalpackage € 50,-</label>
<select class="form-control" name="tickets-Festivalpackage" id='package'>
<option value="50">0</option>
<option value="50">1</option>
<option value="50">2</option>
<option value="50">3</option>
<option value="50">4</option>
<option value="50">5</option>
</select><br>
<label for="tickets-Friday">Friday € 30,-</label>
<select class="form-control" name="tickets-Friday" id='friday'>
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select><br>
<label for="tickets-Saturday">Saturday € 30,-</label>
<select class="form-control" name="tickets-Saturday" id='saturday'>
<option value="30">0</option>
<option value="30">1</option>
<option value="30">2</option>
<option value="30">3</option>
<option value="30">4</option>
<option value="30">5</option>
</select>
</div>
<br>
<br>
<input style="background: none; border: none; outline: none;" type="text" readonly="readonly" id="sum" name="sum" value="€ 0,-" />