diff --git a/frappe/public/js/frappe/form/grid_row.js b/frappe/public/js/frappe/form/grid_row.js index 0f3f01ac61..46058746da 100644 --- a/frappe/public/js/frappe/form/grid_row.js +++ b/frappe/public/js/frappe/form/grid_row.js @@ -416,7 +416,7 @@ export default class GridRow { var me = this; if(field.$input) { field.$input.on('keydown', function(e) { - var { TAB, UP_ARROW, DOWN_ARROW } = frappe.ui.keyCode; + var { TAB, UP: UP_ARROW, DOWN: DOWN_ARROW } = frappe.ui.keyCode; if(!in_list([TAB, UP_ARROW, DOWN_ARROW], e.which)) { return; } @@ -429,43 +429,50 @@ export default class GridRow { if(in_list(['Text', 'Small Text'], fieldtype)) { return; } + if(field.autocomplete_open) { + return; + } base.toggle_editable_row(); - setTimeout(function() { - var input = base.columns[fieldname].field.$input; - if(input) { - input.focus(); - } - }, 400) + var input = base.columns[fieldname].field.$input; + if(input) { + input.focus(); + } - } + }; // TAB if(e.which==TAB && !e.shiftKey) { - // last column - if($(this).attr('data-last-input') || - me.grid.wrapper.find('.grid-row :input:enabled:last').get(0)===this) { - setTimeout(function() { - if(me.doc.idx === values.length) { - // last row + var last_column = me.wrapper.find(':input:enabled:last').get(0); + var is_last_column = $(this).attr('data-last-input') || last_column === this; + + if (is_last_column) { + // last row + if (me.doc.idx === values.length) { + setTimeout(function () { me.grid.add_new_row(null, null, true); me.grid.grid_rows[me.grid.grid_rows.length - 1].toggle_editable_row(); me.grid.set_focus_on_row(); - } else { - me.grid.grid_rows[me.doc.idx].toggle_editable_row(); - me.grid.set_focus_on_row(me.doc.idx+1); - } - }, 500); + }, 100); + } + // last column before last row + else { + me.grid.grid_rows[me.doc.idx].toggle_editable_row(); + me.grid.set_focus_on_row(me.doc.idx); + return false; + } } } else if(e.which==UP_ARROW) { if(me.doc.idx > 1) { var prev = me.grid.grid_rows[me.doc.idx-2]; move_up_down(prev); + return false; } } else if(e.which==DOWN_ARROW) { if(me.doc.idx < values.length) { var next = me.grid.grid_rows[me.doc.idx]; move_up_down(next); + return false; } }