VAR 在所选元素之间进行计数和切换,但会复制属性
VAR counts and toggles between selected elements but duplicates the attribute
我正在研究琐碎的座位预订脚本。在我的代码中,我有一个模仿座位的桌子。每个td
元素都分配了"n"类,并包含唯一的ID(例如id='_21d')。这个想法是能够点击多达 4 个座位。此时应禁止进一步选择,将座位总数计算并显示为"您选择了 4 个座位中的 X",所选座位的 ID 以字符串形式显示,例如"您预订的座位为:14F、11B、4C、10A"。
我正在到达那里,在突出显示 4 个座位后,我设法阻止了进一步的选择,正确计算了座位数,并在反复单击同一座位时切换 +=1 和 -=1。此外,座位 ID 被传递给字符串,但一旦再次单击同一座位,它们就不会被删除。相反,每次在选定座位和未选定座位之间切换时,ID 都会重复并添加到字符串中。这是我需要帮助的地方,如何使ID切换的方式与座位计数器相同?
var seatsAlloc = 0;
$('#plan td.n').bind('click', function(event) {
if (!$(this).hasClass("taken"))
if ($(this).hasClass("selected")) {
seatsAlloc -= 1;
$(this).removeClass("selected");
} else if ($(".selected").length < 4) {
seatsAlloc += 1;
$(this).addClass("selected");
var chosen = ($(this).attr('id').substring(1));
var seatNumb = (chosen.toUpperCase() +" ");
}
$("#selSeats").append(seatNumb);
$('span#seatsAlloc').html(seatsAlloc);
})
我没有看到您实际上在任何时候删除座位名称,只是添加它。 无论如何,我不会跟踪所选席位的数量,而是每次都计算它们并同时重建列表。 像这样的东西——
// I'm removing this because we can count the number of allocated
// seats after each click easily enough
//var seatsAlloc = 0;
var maxSeatsAllowed = 4;
$('#plan td.n').bind('click', function(event) {
if (!$(this).hasClass("taken"))
if ($(this).hasClass("selected")) {
$(this).removeClass("selected");
} else if ($(".selected").length < maxSeatsAllowed) {
$(this).addClass("selected");
}
// "map" will return a jQuery array of the id's
// of all the selected seats (with the first char
// removed) and "get" will then convert that array to a
// regular javascript array which can be "join"ed.
// We then replace the list with the new one.
$("#selSeats").text($(".selected").map(function() {
return this.id.substring(1);
}).get().join(", "));
// Count all the selected seats and replace the previous count
$('span#seatsAlloc').text($(".selected").length + " seats of " + maxSeatsAllowed + " selected");
})
.selected {
background-color: skyblue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="plan">
<tr>
<td class="n" id="_A1">A1</td>
<td class="n" id="_A2">A2</td>
<td class="n" id="_A3">A3</td>
<td class="n" id="_A4">A4</td>
<td class="n" id="_A5">A5</td>
<td class="n" id="_A6">A6</td>
<td class="n" id="_A7">A7</td>
</tr>
<tr>
<td class="n" id="_B1">B1</td>
<td class="n" id="_B2">B2</td>
<td class="n" id="_B3">B3</td>
<td class="n" id="_B4">B4</td>
<td class="n" id="_B5">B5</td>
<td class="n" id="_B6">B6</td>
<td class="n" id="_B7">B7</td>
</tr>
<tr>
<td class="n" id="_C1">C1</td>
<td class="n" id="_C2">C2</td>
<td class="n" id="_C3">C3</td>
<td class="n" id="_C4">C4</td>
<td class="n" id="_C5">C5</td>
<td class="n" id="_C6">C6</td>
<td class="n" id="_C7">C7</td>
</tr>
</table>
<span id="selSeats"></span>
<span id="seatsAlloc"></span>
相关文章:
- 使用数据属性将HTML数据复制到另一个元素
- 将属性模型复制到剪贴板
- lodash:深度复制对象,但不是所有属性
- 复制第一个属性's值,然后使用第一个属性的值创建新属性
- 复制元素的最佳方式是:只复制元素的类型和属性
- 是否可以将一个DOM元素转换为另一个?或者从中复制所有属性
- 复制不带属性的函数引用
- 使用jQuery将属性从一个元素复制到另一个元素
- 尝试复制粘贴输入字段的值时:无法读取属性'nodeType'的未定义
- 将第一个(对象的)数组的属性复制到不同长度的另一个(对象)数组的Javascript方法
- 将 req.body 属性复制到猫鼬模型中时出错
- 将对象的孙属性复制到新创建的对象,而无需太多代码
- 如何将所有数据属性复制到元素
- 多次循环引用对象,将其属性复制到Javascript/Angularjs中的其他对象
- 正在将对象属性复制到循环中具有空正文的数组中
- 将属性值从一个属性复制到另一个属性中的内部字符串
- 通过属性复制重复项和重复项
- 将对象属性复制到新对象属性 - 而不是通过引用
- ES6 仅当属性已存在时才将属性复制到目标
- 用对象的属性复制对象的函数