Skip to content

Commit c1c3a01

Browse files
committed
splitBill: Press 'enter' to select next element
1 parent ef8c3a9 commit c1c3a01

1 file changed

Lines changed: 19 additions & 8 deletions

File tree

SplitBill/splitBill.html

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -366,25 +366,36 @@ <h3>Persons:</h3>
366366
}
367367
}
368368

369+
function selectNext(event, element){
370+
if(event.code !== "Enter") return;
371+
372+
element.classList.add("searching");
373+
const elements = [...document.querySelectorAll(".searching, .selectable")].filter(e=>e.offsetParent != null);
374+
element.classList.remove("searching");
375+
const next = elements[(elements.indexOf(element) + (!event.shiftKey ? 1 : elements.length-1))%elements.length];
376+
next.center();
377+
next.select();
378+
}
379+
369380
// generators
370381

371382
function build() {
372383

373384
document.getElementById("items").innerHTML = data.items.map(item => `<div id="id_${item.id}" class="block">
374385
<div class="flex">
375-
<input class="itemName" type="text" value="" oninput="changeItemName(this, ${item.id})" />
386+
<input class="itemName selectable" type="text" value="" oninput="changeItemName(this, ${item.id})" onkeydown="selectNext(event, this)" />
376387
<span>Price:</span>
377-
<input class="itemPrice" type="number" oninput="changeItemPrice(this, ${item.id})" min="0" step="any" value="" />
388+
<input class="itemPrice selectable" type="number" oninput="changeItemPrice(this, ${item.id})" onkeydown="selectNext(event, this)" min="0" step="any" value="" />
378389
<span>Amount:</span>
379-
<input class="itemAmount" type="number" oninput="changeItemAmount(this, ${item.id})" min="0" step="any" value="" />
390+
<input class="itemAmount selectable" type="number" oninput="changeItemAmount(this, ${item.id})" onkeydown="selectNext(event, this)" min="0" step="any" value="" />
380391
<button onclick="deleteItem(${item.id})">X</button>
381392
</div>
382393
<hr>
383394
${data.persons.map(person=>`<div id="id_${item.id}_${person.id}" class="flex">
384395
<button onclick="centerById(${person.id})">&gt;</button>
385-
<input class="personName" type="text" value="" oninput="changePersonName(this, ${person.id})" />
396+
<input class="personName" type="text" value="" oninput="changePersonName(this, ${person.id})" onkeydown="selectNext(event, this)" />
386397
<span>Amount:</span>
387-
<input class="personAmount" type="number" onchange="changePersonAmount(this, ${person.id}, ${item.id})" min="0" step="any" value="" />
398+
<input class="personAmount selectable" type="number" onchange="changePersonAmount(this, ${person.id}, ${item.id})" onkeydown="selectNext(event, this)" min="0" step="any" value="" />
388399
<button onclick="increasePersonAmount(${person.id}, ${item.id}, 1)">+</button>
389400
<button onclick="increasePersonAmount(${person.id}, ${item.id}, -1)">-</button>
390401
</div>`).join("\n")}
@@ -397,15 +408,15 @@ <h3>Persons:</h3>
397408

398409
document.getElementById("persons").innerHTML = data.persons.map(person => `<div id="id_${person.id}" class="block">
399410
<div class="flex">
400-
<input class="personName" type="text" value="" oninput="changePersonName(this, ${person.id})" />
411+
<input class="personName selectable" type="text" value="" oninput="changePersonName(this, ${person.id})" onkeydown="selectNext(event, this)" />
401412
<button onclick="deletePerson(${person.id})">X</button>
402413
</div>
403414
<hr>
404415
${data.items.map(item =>`<div id="id_${person.id}_${item.id}" class="flex">
405416
<button onclick="centerById(${item.id})">&gt;</button>
406-
<input class="itemName" type="text" value="" oninput="changeItemName(this, ${item.id})" />
417+
<input class="itemName" type="text" value="" oninput="changeItemName(this, ${item.id})" onkeydown="selectNext(event, this)" />
407418
<span>Amount:</span>
408-
<input class="personAmount" type="number" onchange="changePersonAmount(this, ${person.id}, ${item.id})" min="0" step="any" value="" />
419+
<input class="personAmount selectable" type="number" onchange="changePersonAmount(this, ${person.id}, ${item.id})" onkeydown="selectNext(event, this)" min="0" step="any" value="" />
409420
<button onclick="increasePersonAmount(${person.id}, ${item.id}, 1)">+</button>
410421
<button onclick="increasePersonAmount(${person.id}, ${item.id}, -1)">-</button>
411422
<span class="itemPending"></span>

0 commit comments

Comments
 (0)