仅在按 Tab 按钮时在两个文本区域之间切换
Switch between two textareas only when pressing Tab button
通常,当用户访问网页并按键盘上的 TAB 按钮时,选择从一个元素移动到另一个元素从页面开头开始。
我正在寻找一种解决方案,通过在加载网页时按键盘上的 TAB 按钮在第一个文本区域之间切换?对于此 TAB 键按下事件,必须忽略页面上的所有其他元素。
我怎样才能实现这一点?
感谢您的帮助!
=更新 =
我已经设法让它在 火狐12.0 .IE和Chrome无法正常工作。假设文本区域 ID #ICCID 且 #MSISDN,Jquery 如下所示:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$(document).ready(function() {
$("#ICCID").focus();
});
var $inp = $('.cls');
$inp.bind('keydown', function(e) {
var key = e.which;
if (key == 9) {
e.preventDefault();
var nxtIdx = $inp.index(this) + 1;
$(".cls:eq(" + nxtIdx + ")").focus();
//Simulate Enter after TAB
var textInput = $("#MSISDN").val();
var lines = textInput .split(/'r|'r'n|'n/);
if (lines > 1) {
$("#MSISDN").on("keypress", function(e) {
if (e.keyCode == 9) {
var input = $(this);
var inputVal = input.val();
setTimeout(function() {
input.val(inputVal.substring(0,inputVal.length) + "'n");
}, 1);
}
});
}
}
if (key == 9) {
e.preventDefault();
var nxtIdx = $inp.index(this) - 1;
$(".cls:eq(" + nxtIdx + ")").focus();
//Simulate Enter after TAB
$("#ICCID").on("keypress", function(e) {
if (e.keyCode == 9) {
var input = $(this);
var inputVal = input.val();
setTimeout(function() {
input.val(inputVal.substring(0,inputVal.length) + "'n");
}, 1);
}
});
}
});
});
</script>
使用
jQuery 捕获键下操作,确定哪个文本区域具有焦点,然后使用 focus() 方法将焦点设置为另一个文本区域。
假设您的文本区域有 id="textarea1" 和 id="textarea2"。首先,您可以在页面加载时将焦点设置为第一个文本区域,方法是执行以下操作: $('#textarea1').focus();
$("body").keypress(function(e) {
var code = (e.keyCode ? e.keyCode : e.which);
switch(code)
{
case 9:
if($("#textarea1").focus()){
//First one has focus, change to second one
$("#textarea2").focus();
}
else if($("#textarea2").focus()) {
//Second one has focus, change to first one
$("#textarea1").focus();
}
}
});
好的,我已经找到了适合我的任务的解决方案!它还包括在 TAB 键事件之后对 ENTER 键的模拟,因此用户无需按 Enter 即可转到新行。与IE9,FF12,Chrome 18.0.x一起测试
在这里:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<!-- Switching between ICCIDs and MSISDNs textareas + simulating ENTER key pressing after the TAB key event - START -->
<script type="text/javascript">
$(function() {
$(document).ready(function() {
$("#ICCID").focus();
});
var $inp = $('.cls');
$inp.bind('keydown', function(e) {
var key = e.which;
if (key == 9) {
e.preventDefault();
var nxtIdx = $inp.index(this) + 1;
$(".cls:eq(" + nxtIdx + ")").focus();
//Simulate Enter after TAB
var textInput = $("#MSISDN").val();
var lines = textInput .split(/'r|'r'n|'n/);
if (lines > 1) {
$("#MSISDN").on("keyup", function(e) {
if (e.keyCode == 9 || e.which == 9) {
var input = $(this);
var inputVal = input.val();
setTimeout(function() {
input.val(inputVal.substring(0,inputVal.length) + "'r'n");
}, 1);
}
});
}
}
if (key == 9) {
e.preventDefault();
var nxtIdx = $inp.index(this) - 1;
$(".cls:eq(" + nxtIdx + ")").focus();
//Simulate Enter after TAB
$("#ICCID").on("keyup", function(e) {
if (e.keyCode == 9 || e.which == 9) {
var input = $(this);
var inputVal = input.val();
setTimeout(function() {
input.val(inputVal.substring(0,inputVal.length) + "'r'n");
}, 1);
}
});
}
});
});
</script>
<!-- Switching between ICCIDs and MSISDNs textareas + simulating ENTER key pressing after the TAB key event - END -->
这个呢?我想我在工作中很无聊..
http://jsbin.com/uqalej/3/
.HTML:
<input/>
<textarea id="t1"></textarea>
<textarea id="t2"></textarea>
<input/>
<button onClick='window.toggleBetween=true;'>Init</button>
<button onClick='window.toggleBetween=false;'>Destroy</button>
.JS:
var d = document,
t1 = d.getElementById("t1"),
t2 = d.getElementById("t2"),
nodeType, nodeTypes = [],
i, iLen,
y, yLen;
nodeTypes.push( d.getElementsByTagName("textarea") );
nodeTypes.push( d.getElementsByTagName("input") );
nodeTypes.push( d.getElementsByTagName("select") );
i = 0;
iLen = nodeTypes.length;
for ( ; i < iLen; i++ ) {
nodeType = nodeTypes[i];
y = 0;
yLen = nodeType.length;
for ( ; y < yLen; y++ ) {
if ( nodeType[y] != t1 && nodeType[y] != t2 ) {
nodeType[y].onfocus = function() {
if ( window.toggleBetween )
t1.focus();
};
}
}
}
在页面加载时使用javascript:
document.getElementById("textarea1").focus();
document.getElementById('textarea1').tabIndex="1";
document.getElementById('textarea2').tabIndex="2";
相关文章:
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- 使用javascript将两个文本框值相加到表中的另一个文本框中
- 有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出
- 如何将(a*b)两个输入文本值相乘,并在javascript中随文本变化动态显示
- 使用两个下拉列表的值填充文本框
- 一个文本框,其中两个选项的值不同
- 谷歌应用程序在两个标签之间编写目标文本
- 我需要从文本框中的名字和姓氏的前两个字母到页面中的某个位置
- 同时在两个文本框上显示光标
- javascript:无法添加两个文本输入
- 使用 JavaScript 中的正则表达式替换大文本中两个字符之间的每个出现的字符串
- 在两个括号内插入文本 - Javascript
- 识别两个文本中的单词(if 语句在 for 循环中)
- 如何使用HTML5和Javascript同时读取两个文本文件
- 在jQuery或JavaScript中获取两个字符串之间的文本
- 创建选项卡,每个选项卡有两个文本区域
- 文本框中需要两个单词,使用AngularJS
- 添加两个数字,并使用Javascript在文本框中显示结果
- 两个文本框事件Javascript
- 如何获取两个容器之间的文本