Как я могу изменить элемент списка после того, как я создал его с помощью jQuery?

Это мой список дел, которые я сделал. (Чтобы сделать мой код более читабельным, я попытался прокомментировать его. Надеюсь, это сработало.)

Если вы попробуете мою демонстрацию, вы можете добавить элементы li с помощью кнопки «Добавить». И у элементов li есть еще 2 кнопки. Я хочу создать кнопку изменения, чтобы пользователи могли изменять свои элементы списка. Я понятия не имею, что я могу сделать для этого с jQuery.

Вторая проблема заключается в том, что кнопки списка не работают идеально. Потому что, если я использую один раз кнопку удаления, она меняет кнопку «Готово», чтобы удалить элемент. Но если я не использую кнопку «Удалить», кнопка «Готово» работает хорошо. Я не знаю, почему, может быть, проблема в том же имени класса?

Вот моя демонстрация в JS Bin:https://jsbin.com/natiziqawa/edit?html,js,output

   $(document).ready(function(){
     $("#add").click(function(){

 // Created list elements and their's buttons
    var list_item =document.createElement("li");
      var remove_button=document.createElement("button");
      var done_button=document.createElement("button");
     


 // append the buttons some string to caption buttons
   

   $(remove_button).append("Delete");
   $(done_button).append("Done");


   


 
 // added class name the items to to distinguish them 

  $(list_item).addClass("item")
  $(remove_button).addClass("delete"); 
  $(done_button).addClass("done"); 
  



 // filled  the created items with the input values
 
 var list_text =$("#input").val();
 var time=$("#time").val();
 
 
 // filled the list item with their's  buttons and class names and input values

 $(list_item).append(time,"   :   ",list_text,done_button,remove_button); 

 // finally fill the ul with list items but first check out what is written in the input


 if (input.value= = ""){
   alert("Please enter an activity")
 
  }


  // If the input has some value  can go 

  else{
 $("ul").append(list_item);

 // after clicked, clear the input field
 $("#input").val("");
 
  


// list item's buttons


$(".done").click(function(){

  $(list_item).click(function(){
    $(this).css("color","white")
    $(this).css("text-decoration","line-through")
  }); 
});





$(".delete").click(function(){
    $(list_item).click(function(){
      $(this).remove()
    }); 
  });

}

  });// main function close
  
}); // document ready close

Вам нравится jsfiddle.net?

react_or_angluar 12.12.2020 22:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
169
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Идея моего решения заключается в использовании атрибута contenteditable для добавленных полей. Для этого вам нужно динамически обернуть первые два поля в дополнительный div, как показано здесь:

$(list_item).append('<div class = "edit_item" contenteditable = "true">'+time+'</div>',"   :   ",'<div class = "edit_item" contenteditable = "true">'+list_text+'</div>',done_button,remove_button); 

Вам нужно будет заменить этот код существующим. Для лучшего понимания этот код находится в комментарии: "// заполнил элемент списка своими кнопками и именами классов и входными значениями"

Также вам нужно добавить это правило в css для выравнивания полей:

.edit_item {
  display: inline-block;
}

А по второму вопросу:

У вас возникла проблема с таргетингом. Вы должны обратиться к текущему list_item, используя метод closest().

Для отметки:

$(".done").click(function(){
   $(this).closest(list_item).css("color","white")
   $(this).closest(list_item).css("text-decoration","line-through");
});

Для удаления:

$(".delete").click(function(){
   $(this).closest(list_item).remove();
});

Я попробовал ваш код, и ничего себе, он работает. Спасибо . Раньше я не знал contenteditable. О моих кнопках, попробуйте еще раз, добавьте 5 элементов и используйте один раз кнопку удаления на первом элементе, а затем используйте кнопку «Готово» на последнем элементе. Это будет удалено.

Endre Kovács 13.12.2020 09:23

@EndreKovács, привет. Да, есть такая проблема. Я обновил свой ответ и дал вам код. Это сработало отлично для меня.

s.kuznetsov 13.12.2020 11:40

Спасибо большое работает. Можете ли вы сказать мне, почему не работает код?

Endre Kovács 13.12.2020 15:51

@EndreKovács, потому что вы обернули два клика по разным селекторам, сделав их родительско-дочерними - это неправильно.

s.kuznetsov 13.12.2020 16:04

Другие вопросы по теме