问题描述
在我的,我问了如何使用箭头键导航表格单元格。现在我正在尝试创建另一个与第一个表相同的表。
如何达到这个目标?
这是我到目前为止。
td.active {border:2px solid#2c3e50 ; font-weight:bold; background-color:#ddd;}。textClass {font-weight:bold; } input:focus {outline:none; }
< script src =https:// ajax .googleapis.com / ajax / libs / jquery / 1.8.3 / jquery.min.js>< / script>< table border =1id =navigate> < THEAD> <的第i; CELL 1< / th> <的第i; CELL 2< / th> <的第i; CELL 3< / th> <的第i; CELL 4< / th> <的第i; CELL 5< / th> < / THEAD> < TBODY> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < / tbody>< / table>< br>< br>< table border =1id =table2> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < TBODY> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < TR> < td>< input type =textvalue =CELL 1/>< / td> < td>< input type =textvalue =CELL 2/>< / td> < td>< input type =textvalue =CELL 3/>< / td> < td>< input type =textvalue =CELL 4/>< / td> < td>< input type =textvalue =CELL 5/>< / td> < / TR> < / tbody>< / table>
请参阅此示例演示链接。
On my previous post, I asked how to navigate a table cell using an arrow key. And now I'm trying to create another table that will behave same with the first one.
How to achieve this?
Here is what I have so far.
var active = 0; //$('#navigate td').each(function(idx){$(this).html(idx);}); rePosition(); $(document).keydown(function(e) { var inp = String.fromCharCode(event.keyCode); if (!(/[a-zA-Z0-9-_ ]/.test(inp) || event.keyCode == 96)){ reCalculate(e); rePosition(); // if key is an arrow key, don't type the user input. // if it is any other key (a, b, c, etc) // edit the text if (e.keyCode > 36 && e.keyCode < 41) { return false; } } }); $('td').click(function() { active = $(this).closest('table tbody').find('td').index(this); rePosition(); }); function reCalculate(e) { var rows = $('#navigate tbody tr').length; var columns = $('#navigate tbody tr:eq(0) td').length; var temp; if (e.keyCode == 37) { //move left or wrap temp = active; while (temp > 0) { temp = temp - 1; // only advance if there is an input field in the td if ($('#navigate tbody tr td').eq(temp).find('input').length != 0) { active = temp; break; } } } if (e.keyCode == 38) { // move up temp = active; while (temp - columns >= 0) { temp = temp - columns; // only advance if there is an input field in the td if ($('#navigate tbody tr td').eq(temp).find('input').length != 0) { active = temp; break; } } } if (e.keyCode == 39) { // move right or wrap temp = active; while (temp < (columns * rows) - 1) { temp = temp + 1; // only advance if there is an input field in the td if ($('#navigate tbody tr td').eq(temp).find('input').length != 0) { active = temp; break; } } } if (e.keyCode == 40) { // move down temp = active; while (temp + columns <= (rows * columns) - 1) { temp = temp + columns; // only advance if there is an input field in the td if ($('#navigate tbody tr td').eq(temp).find('input').length != 0) { active = temp; break; } } } } function rePosition() { console.log(active); $('.active').removeClass('active'); $('#navigate tbody tr td').eq(active).addClass('active'); $('#navigate tbody tr td').find('input').removeClass('textClass'); $('#navigate tbody tr td').eq(active).find('input').addClass('textClass'); $('#navigate tbody tr td').eq(active).find('input').select(); var input = $('#navigate tbody tr td').eq(active).find('input').focus(); scrollInView(); } function scrollInView() { var target = $('#navigate tbody tr td:eq(' + active + ')'); if (target.length) { var top = target.offset().top; $('html,body').stop().animate({ scrollTop: top - 100 }, 400); return false; } }
td.active{ border:2px solid #2c3e50; font-weight:bold; background-color:#ddd; } .textClass{ font-weight:bold; } input:focus { outline: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <table border="1" id="navigate"> <thead> <th> CELL 1</th> <th> CELL 2</th> <th> CELL 3</th> <th> CELL 4</th> <th> CELL 5</th> </thead> <tbody> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> </tbody> </table> <br><br> <table border="1" id="table2"> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> <tbody> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> <tr> <td><input type="text" value="CELL 1" /></td> <td><input type="text" value="CELL 2" /></td> <td><input type="text" value="CELL 3" /></td> <td><input type="text" value="CELL 4" /></td> <td><input type="text" value="CELL 5" /></td> </tr> </tbody> </table>
Please refer to this link for the sample demo.
After a bit sweating research, it gets to the proper solution. As we can't click inside the TDs of any other tables: we need to change the way of finding the index of td.
Currently it's as:
$(this).closest('table tbody').find('td').index(this);
This always returns the first table td indexes.
Below code helps finding exact index of TD where current focus is:
$('table td').index(this);
Though it looks a simple line.. little huge Research made it that small...
这篇关于使用箭头键导航两个带有输入文本的HTML表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!