我希望能够在单击.editbox
后将其按下,然后将focus
带到下一个.editbox
。我已经把代码弄乱了一个小时,无法“找到”下一个元素。
这是我要做的代码。为了获得帮助,您可能需要更多背景信息。我做了jsfiddle来详细说明我要处理的内容。
//on tab
$(".edit_tr").on('keydown', '.editbox', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 9) {
e.preventDefault();
var focus = $(document.activeElement);
//console.log(focus);
focus.closest('td').siblings('.editbox').focus();
console.log(focus.parent().next('.editbox'));
}
});
最佳答案
在第41行上,您必须使用:
focus.closest('td').next().find(".editbox").show().focus();
这将返回到当前的
td
,查找以下td
标记,搜索.editbox,然后在对它进行focus()处理之前,必须先对其进行show()处理(使其可见)。此解决方案仅适用于1行。如果要使用Tab键在不同的行之间移动,则必须执行以下操作:
var nextEditbox = focus.closest('td').next().find(".editbox");
//check if there are still .editboxes on the same line
if(nextEditbox.length){
//go for it and focus the next edit box on the same line
nextEditbox.show().focus();
}
else {
//move to the next line and search for the next editbox
nextEditbox = focus.closest('tr').next().find(".edit_td:first").find(".editbox");
//show and focus
nextEditbox.show().focus();
}
//this will end the focusing and the .change() (which is defined above) will fire and do the ajax
focus.blur();
您必须自己隐藏.text元素。
编辑:这是Savebutton-Solution。我没有测试它,但是我认为它应该起作用。
var changes = [];
$(".editbox").change(function(){
changes.push({ id : $(this).attr("id"), changed : $(this).attr("name"), data : $(this).val() });
});
$(".savebutton").click(function(){
//AJAX SENDING THE changes VAR TO THE PHP FILE
});