Tengo un conocimiento mínimo de javascript y jquery, por lo que el problema es que cuando hago clic con la pestaña "li" del mouse y presione ENTER jquery adjuntar .append () en cada evento de clic del mouse.
$(document).on("click", function(event){ let $ul_elem = $(event.target).parent().parent(); const $li = '<li><input type="text" name="geras"></li>' if($(event.target).parent().prop("localName")=="li"){ console.log($(this.event)) $(window).on("keydown", function(event){ if(event.keyCode == 13) { event.preventDefault(); $($ul_elem).append($li); $($ul_elem).children().last().children().focus(); return false } }) } else{ $(window).unbind("keydown"); } })como resultado, si hago clic como 5 veces con el mouse en la misma pestaña li, se crearán 5 nuevos elementos const $ li y no quiero eso.
Debe evitar vincular controladores de eventos en el contexto de otro controlador de eventos. Actualmente, su código vuelve a vincular el controlador keydown en cada clic (cuando las declaraciones if tienen éxito). Esta es la razón por la cual el código agrega varios elementos en cada Enter. Supongo que desea agregar elementos li a elementos ul condicionalmente. En caso afirmativo, esta es una forma de hacerlo:
$(document).on("click", "ul", function() { $(this).toggleClass('active'); }); $(window).on("keydown", 'ul.active', function(event) { if (event.keyCode == 13) { const $ul_elem = $(this); const li = '<li><input type="text" name="geras"></li>' event.preventDefault(); $ul_elem.append(li); $ul_elem.children().last().children().focus(); return false } }) Esto hace que el controlador keydown funcione de forma condicional mediante el uso de la delegación de eventos. En caso de que desee escuchar el evento keydown de los elementos de input , puede simplemente codificar $(document).on("keydown", 'input[type=text]', function(event) { ... y no es necesario para usar el controlador de click no estoy seguro de lo que estás tratando de lograr.
lo que quiero hacer es después de poner texto en mi campo de entrada li> predeterminado y presionar ENTER quiero crear un nuevo li en ul
Esto debería hacerlo:
$(document).on("keyup", 'li input[type=text]', function(event) { if (event.keyCode == 13) { const $ul_elem = $(this).closest('ul'); const li = '<li><input type="text" name="geras"></li>' event.preventDefault(); $ul_elem.append(li); $ul_elem.children().last().children().focus(); } })