diff --git a/addons/web_tour/static/src/js/running_tour_action_helper.js b/addons/web_tour/static/src/js/running_tour_action_helper.js index f41c837fee4..0872adf70eb 100644 --- a/addons/web_tour/static/src/js/running_tour_action_helper.js +++ b/addons/web_tour/static/src/js/running_tour_action_helper.js @@ -81,7 +81,11 @@ var RunningTourActionHelper = core.Class.extend({ text = text || "Test"; if (values.consume_event === "input") { - values.$element.trigger("keydown").val(text).trigger("keyup").trigger("input"); + values.$element + .trigger({ type: 'keydown', key: text[text.length - 1] }) + .val(text) + .trigger({ type: 'keyup', key: text[text.length - 1] }); + values.$element[0].dispatchEvent(new InputEvent('input')); } else if (values.$element.is("select")) { var $options = values.$element.children("option"); $options.prop("selected", false).removeProp("selected"); @@ -128,17 +132,31 @@ var RunningTourActionHelper = core.Class.extend({ }, _keydown: function (values, keyCodes) { while (keyCodes.length) { - var keyCode = +keyCodes.shift(); - values.$element.trigger({type: "keydown", keyCode: keyCode}); - if ((keyCode > 47 && keyCode < 58) // number keys - || keyCode === 32 // spacebar - || (keyCode > 64 && keyCode < 91) // letter keys - || (keyCode > 95 && keyCode < 112) // numpad keys - || (keyCode > 185 && keyCode < 193) // ;=,-./` (in order) - || (keyCode > 218 && keyCode < 223)) { // [\]' (in order)) - document.execCommand("insertText", 0, String.fromCharCode(keyCode)); + const eventOptions = {}; + const keyCode = keyCodes.shift(); + let insertedText = null; + if (isNaN(keyCode)) { + eventOptions.key = keyCode; + } else { + const code = parseInt(keyCode, 10); + eventOptions.keyCode = code; + eventOptions.which = code; + if ( + code === 32 || // spacebar + (code > 47 && code < 58) || // number keys + (code > 64 && code < 91) || // letter keys + (code > 95 && code < 112) || // numpad keys + (code > 185 && code < 193) || // ;=,-./` (in order) + (code > 218 && code < 223) // [\]' (in order)) + ) { + insertedText = String.fromCharCode(code); + } } - values.$element.trigger({type: "keyup", keyCode: keyCode}); + values.$element.trigger(Object.assign({ type: "keydown" }, eventOptions)); + if (insertedText) { + document.execCommand("insertText", 0, insertedText); + } + values.$element.trigger(Object.assign({ type: "keyup" }, eventOptions)); } }, });