自动扫描和聚焦 HTML 页面的元素
Scan and Focus elements of an HTML page automatically
1) 是否可以在页面加载时或按下按键时自动扫描并聚焦 HTML 页面的元素,一个接一个(例如:链接、输入文本...)?我认为我应该使用 javascript 函数。
此外,
2) 是否可以在焦点到达末尾时重新开始循环? (焦点转到元素 1,然后是 2、3、4 和 5,然后回到 1,依此类推。)
3) 是否可以在按下键盘键时停止循环(例如,当焦点位于元素 2 上时),并在按下同一键时继续循环哪里被屏蔽了?
谢谢。
Javascript: How to loop through ALL DOM elements on a page?
就像那个答案一样,您可以循环遍历元素:
var all = document.getElementsByTagName("*");
for (var i=0, max=all.length; i < max; i++) {
// Do something with the element here like focus:
all[i].focus();
}
1)如果您指定应该关注哪些所有元素而不是遍历所有dom元素会更好。
2)通过这种方法,您甚至可以指定您希望元素聚焦的顺序。
希望这是您所期望的。
$(document).ready(function() {
currentTabIndex = 1;
var totalTabIndexes = $("[tabindex]").length;
var arrayOfkeys = new Array();
function focusCycle() {
if (currentTabIndex <= totalTabIndexes) {
$("[tabindex=" + currentTabIndex + "]").focus();
currentTabIndex++;
} else {
currentTabIndex = 1;
$("[tabindex=" + currentTabIndex + "]").focus();
currentTabIndex++;
}
}
//start the cycle
var tabIndexTimer = setInterval(focusCycle, 500);
$(document).on("keypress", function(e) {
//check if the key was pressed earlier
var wasKeyPressedEarlier = $.inArray(e.which, arrayOfkeys);
if (wasKeyPressedEarlier != -1) {
//if the key was pressed earlire stop the focus cycle
arrayOfkeys.splice(wasKeyPressedEarlier, 1);
tabIndexTimer = setInterval(focusCycle, 500)
} else {
//if key is pressed for the first time push it in the array
arrayOfkeys.push(e.which);
clearInterval(tabIndexTimer);
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>1
<input type="text" placeholder="1" tabindex="1">
</div>
<div>3
<input type="text" placeholder="3" tabindex="3">
</div>
<div>4
<input type="text" placeholder="4" tabindex="4">
</div>
<div>2
<input type="text" placeholder="2" tabindex="2">
</div>
<div>5
<input type="text" placeholder="5" tabindex="5">
</div>
如果你想根据其他事件(如点击事件)改变焦点你可以这样说:
ElementsNumber = document.getElementsByTagNam('*') ;
/* or you can say ElementsNumber = document.getElementById('foo'); where foo
is the container of the elements that you want to toggle focus between*/
var x = 0 ;
function changeFocus()
{
ElementsNumber[x].focus();
++x ;
}
document.getElementById('focus-button').onclick = changeFocus()
// where the 'focus-button' is the element which you want to change focus if it clicked
但不要尝试同时给所有元素(或一组)提供焦点,不能同时为多个元素触发焦点事件,你可以找到很多关于Mozila Developers Network (MDN) 中的 "fact",但是您可以将焦点放在整个文档上:
$(document).focus(); //jquery
window.focus(); // pure javascript
或者您可以按以下方式循环 html Dom :
ElementsNumber = document.getElementsByTagNam('*') ;
for ( i = 0 ; i < ElementsNumber.length ; i++ )
{
// somethings to be done to all elements
}
这将使所有元素成为焦点。 但是如果你想在指定的时间间隔分别将焦点切换到元素,你可以使用 setInterval() 函数,如下所示:
ElementsNumber = document.getElementsByTagNam('*') ;
var x = 0 ;
function changeFocus()
{
ElementsNumber[x].focus();
++x ;
}
setInterval(function(){ changeFocus(); }, 3000);
这将每 3 秒将焦点更改到 dom 中的下一个元素。
我希望这个答案是您想要的...
1) 是否可以在页面加载时或按下按键时自动扫描并聚焦 HTML 页面的元素,一个接一个(例如:链接、输入文本...)?我认为我应该使用 javascript 函数。
此外,
2) 是否可以在焦点到达末尾时重新开始循环? (焦点转到元素 1,然后是 2、3、4 和 5,然后回到 1,依此类推。)
3) 是否可以在按下键盘键时停止循环(例如,当焦点位于元素 2 上时),并在按下同一键时继续循环哪里被屏蔽了?
谢谢。
Javascript: How to loop through ALL DOM elements on a page?
就像那个答案一样,您可以循环遍历元素:
var all = document.getElementsByTagName("*");
for (var i=0, max=all.length; i < max; i++) {
// Do something with the element here like focus:
all[i].focus();
}
1)如果您指定应该关注哪些所有元素而不是遍历所有dom元素会更好。
2)通过这种方法,您甚至可以指定您希望元素聚焦的顺序。
希望这是您所期望的。
$(document).ready(function() {
currentTabIndex = 1;
var totalTabIndexes = $("[tabindex]").length;
var arrayOfkeys = new Array();
function focusCycle() {
if (currentTabIndex <= totalTabIndexes) {
$("[tabindex=" + currentTabIndex + "]").focus();
currentTabIndex++;
} else {
currentTabIndex = 1;
$("[tabindex=" + currentTabIndex + "]").focus();
currentTabIndex++;
}
}
//start the cycle
var tabIndexTimer = setInterval(focusCycle, 500);
$(document).on("keypress", function(e) {
//check if the key was pressed earlier
var wasKeyPressedEarlier = $.inArray(e.which, arrayOfkeys);
if (wasKeyPressedEarlier != -1) {
//if the key was pressed earlire stop the focus cycle
arrayOfkeys.splice(wasKeyPressedEarlier, 1);
tabIndexTimer = setInterval(focusCycle, 500)
} else {
//if key is pressed for the first time push it in the array
arrayOfkeys.push(e.which);
clearInterval(tabIndexTimer);
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>1
<input type="text" placeholder="1" tabindex="1">
</div>
<div>3
<input type="text" placeholder="3" tabindex="3">
</div>
<div>4
<input type="text" placeholder="4" tabindex="4">
</div>
<div>2
<input type="text" placeholder="2" tabindex="2">
</div>
<div>5
<input type="text" placeholder="5" tabindex="5">
</div>
如果你想根据其他事件(如点击事件)改变焦点你可以这样说:
ElementsNumber = document.getElementsByTagNam('*') ;
/* or you can say ElementsNumber = document.getElementById('foo'); where foo
is the container of the elements that you want to toggle focus between*/
var x = 0 ;
function changeFocus()
{
ElementsNumber[x].focus();
++x ;
}
document.getElementById('focus-button').onclick = changeFocus()
// where the 'focus-button' is the element which you want to change focus if it clicked
但不要尝试同时给所有元素(或一组)提供焦点,不能同时为多个元素触发焦点事件,你可以找到很多关于Mozila Developers Network (MDN) 中的 "fact",但是您可以将焦点放在整个文档上:
$(document).focus(); //jquery
window.focus(); // pure javascript
或者您可以按以下方式循环 html Dom :
ElementsNumber = document.getElementsByTagNam('*') ;
for ( i = 0 ; i < ElementsNumber.length ; i++ )
{
// somethings to be done to all elements
}
这将使所有元素成为焦点。 但是如果你想在指定的时间间隔分别将焦点切换到元素,你可以使用 setInterval() 函数,如下所示:
ElementsNumber = document.getElementsByTagNam('*') ;
var x = 0 ;
function changeFocus()
{
ElementsNumber[x].focus();
++x ;
}
setInterval(function(){ changeFocus(); }, 3000);
这将每 3 秒将焦点更改到 dom 中的下一个元素。
我希望这个答案是您想要的...