Как сделать jQuery целевым и подключить вызов плагина к сотням идентификаторов CSS с идентификатором в конце?

Я использую одну из моих любимых библиотек JavaScript для редактирования на месте вызова X-Editable
https://github.com/vitalets/x-editable

Я создаю приложение для управления проектами. На странице проекта есть несколько списков задач, и каждый список также может иметь несколько задач.

В одном проекте может быть 100 или более задач. Когда пользователь нажимает на заголовок задачи, я запускаю всплывающее модальное окно на странице, которое показывает все детали задачи для выбранных задач. Вещи как:

  • Название задачи
  • Описание задания
  • Дата создания задачи
  • Дата изменения задачи
  • Срок выполнения задания
  • веха
  • Состояние задачи
  • Приоритет задачи
  • Комментарии к заданию (для задачи также может быть показано любое количество комментариев)

Для каждого из этих элементов сведений о задачах многие из них будут иметь возможность редактирования на месте с использованием библиотеки X-Editable JavaScript.

В настоящее время у меня есть быстрый макет, показывающий, как я могу использовать библиотеку для редактирования некоторых полей здесь [Макет удален, так как он был обновлен много раз и изменен с момента публикации этого вопроса]

$(document).ready(function() {

  //toggle `popup` / `inline` mode
  $.fn.editable.defaults.mode = 'inline';

  $('#task-title-modal').editable({
      type: 'text', // text|textarea|select|date|checklist
      url: '/updatetask',    
      pk: 1,
      toggle: 'click', // click|dblclick|mouseenter|manual
      highlight: '#FFFF80',
      mode: 'inline', // inline | popup
      placement: 'top',
      title: 'Enter Task Title',
      tpl: '<input type="text" style="width: 253px; padding-right: 24px;">',
      validate: function(value) {
          if($.trim(value) == '') {
              return 'This field is required';
          }
      },
      params: function(params) {
          //Addition params in addition to the default: pk, name, value
          params.userId = 1;
          params.projectId = 1;
          params.taskId = 1;
          return params;
      },
      success: function(response, newValue) {
          if(!response.success) return response.msg;
      }
  });



  //ajax emulation. Type "err" to see error message
  $.mockjax({
      url: '/updatetask',
      responseTime: 900, // simulate lag
      response: function(settings) {
          console.log(settings.data);
          if(settings.data.value == 'err') {
             this.status = 500;  
             this.responseText = 'Validation error!';
          } else {
             this.responseText = '';  
          }
      }
  }); 

});

Эта демонстрационная страница прекрасно работает... с 1 исключением... это для 1 записи задачи!

Мне нужно выяснить, как сделать так, чтобы оно работало для X записей задач на странице.

Если у проекта есть 100 записей задач, тогда мой JavaScript должен назначить код X-Editable каждой записи задачи и каждой поданной в каждой из этих записей задач!


У меня вопрос, как я могу заставить эту библиотеку работать для встроенного редактирования для любого количества записей на одной странице?

Прямо сейчас для каждого поля в каждой задаче я должен сделать что-то вроде этого...

$('#task-title-modal').editable({})  

Поэтому мне нужно, возможно, сделать что-то вроде этого...

$('#task-title-modal-ID_NUMBER_HERE').editable({}) 

Затем в моем HTML-коде я могу установить идентификатор с идентификационным номером для каждой записи задачи. Затем селектору jQuery нужно каким-то образом использовать какой-нибудь метод подстановки, чтобы найти все эти идентификаторы.... есть идеи?

1 ответ

Решение

Есть несколько способов

Одним из них является использование атрибута, начинающегося с селектора - было бы лучше, если бы вы могли улучшить его с помощью селектора элемента, такого как $('div[id^="task-title-modal-"]') если все элементы div

$('[id^="task-title-modal-"]').editable({}) 

Другой - использовать класс, как редактируемый, для всех этих элементов, а затем использовать селектор класса.

$('.editable').editable({}) 
Другие вопросы по тегам