我有一个使用 JQuery 和 Jeditable 在页面上创建可编辑文本元素的页面。
在编辑元素时,我希望能够从一个元素切换到下一个元素。
我不确定如何:
使用 jeditable 或 jquery 捕获 tab 键事件(keycode = 9)
一旦检测到该事件,将焦点移动到下一个元素并通过 jeditable 激活它
任何帮助表示赞赏。谢谢!
我设法找到了一种方法:
$('div.editbox').bind('keydown', function(evt) {
if(evt.keyCode==9) {
$(this).find("input").blur();
var nextBox='';
if ($("div.editbox").index(this) == ($("div.editbox").length-1)) {
nextBox=$("div.editbox:first"); //last box, go to first
} else {
nextBox=$(this).next("div.editbox"); //Next box in line
}
$(nextBox).dblclick(); //Go to assigned next box
return false; //Suppress normal tab
};
});
在选项卡上,双击(此处设置 jeditable 以使用 dblclick 事件)被发送到下一个框。如果它是最后一个编辑框(分配了一个唯一的类,我遇到了选择器问题),它会转到第一个。
我还使用了 find("input") 因为我无法找到另一个选择器来选择 jeditable 创建的输入进行模糊。
不是最佳的,但它有效。
$('div.edit').bind('keydown', function(evt) {
if(evt.keyCode==9) {
var nextBox='';
var currentBoxIndex=$("div.edit").index(this);
if (currentBoxIndex == ($("div.edit").length-1)) {
nextBox=$("div.edit:first");
} else {
nextBox=$("div.edit").eq(currentBoxIndex+1);
}
$(this).find("input").blur();
$(nextBox).click();
return false;
};
});
做检查它会帮助你
一种解决方案是让可编辑元素的容器进行监听,甚至可能是文档。然后查询文档或容器中的可编辑元素,确定哪个是当前编辑最多的,然后移动到列表中的下一个元素,这是一项简单的任务。
只是一个小小的补充——如果你的 jeditable 字段嵌套在其他元素中,'nextBox=$(this).next("div.editbox");' 将不起作用,因此创建一个“目标”元素数组并从内部工作......
$('.editable_textarea').bind('keydown', function(evt) {
if(evt.keyCode==9) {
$(this).find("input").blur();
// create an array of targeted jeditable fields
var boxArray = $("#parent_element").find('.editable_textarea')
var nextBox = '';
if ($('.editable_textarea').index(this) == ($('.editable_textarea').length-1)) {
nextBox = $(".editable_textarea:first"); //last box, go to first
} else {
// use the index of the active field to find the next one in the boxArray
nextBox = boxArray[$('.editable_textarea').index(this)+1]; //Next box in line
}
$(nextBox).click(); //Go to assigned next box
return false; //Suppress normal tab
};
});