Как редактировать все td на tbody

Итак, что я пытаюсь сделать, это добавить в свой код функцию «изменения», она работает только для первого td, но не для любого другого, когда я нажимаю на другой td, он автоматически редактирует первый. Кто-нибудь знает, почему мой код меняет только td> name / td>, а не td> adress / td> или любой другой td>

html:

 <form id = "registrering">
    <label>Navn: <input id = "inpnavn" placeholder = "Raahim Khan" type = "text" required></label>
    <label>Adresse: <input id = "inpadresse" type = "text" placeholder = "Adresse 12" required></label>
    <label>Mobilnummer: <input id = "inpmobilnummer" placeholder = "12345678" required></select></label>
    <label>Kjønn: 
      <select id = "inpkjønn" required>
        <option value = "" selected disabled hidden>Velg kjønn</option>
        <option>Mann</option>
        <option>Kvinne</option>
        <option>intetkjønn</option>
      </select>
    </label>
    <button type = "submit">Send inn</button>
 </form>

 //showing the data on website


    function hentruss(snapshot){
        var pk = snapshot.key;
        var nyruss = snapshot.val();
        var russref = database.ref("russ/" + nyruss.russ);
        russref.on("value", function(snapshotruss){
            var russobj = snapshotruss.val();
            txttabell.innerHTML += `
                <tr id = "${pk}">
                    <td><label class = "russlabel" onclick = "edit('${pk}')">${nyruss.navn}</label><input type = "text" class = "editItem" style = "display:none"></td>
                    <td><label class = "russlabel" onclick = "edit('${pk}')">${nyruss.adresse}</label><input type = "text" class = "editItem" style = "display:none"></td>
                    <td>${nyruss.mobilnummer}</td>
                    <td>${nyruss.kjønn}</td>
                    <td><label class = "delete" onclick = "slett('${pk}')"><button>Slett</button></label></td>
                </tr>
            `;

        });
    }

// обновляем имя, адрес и т. д., щелкнув элемент.

      function edit(pk) {
        var russen = russ.child(pk);


        var label = document.querySelector(`#${pk} .russlabel`);
        label.style.display = "none";
        var tekst = label.innerText;

        var inputfelt = document.querySelector(`#${pk} .editItem`);
        inputfelt.style.display = "block";
        inputfelt.value = tekst;
        inputfelt.focus();

        inputfelt.onblur = function() {
            inputfelt.style.display = "none";
            label.style.display = "block";
        };

        inputfelt.onchange = function() {
            russen.update(  {tekst: inputfelt.value}  )
            inputfelt.style.display = "none";
            label.style.display = "block"; 
            label.innerText = inputfelt.value;
        };

    }

Спасибо за вашу помощь, но я не уверен, как я собираюсь сделать петлю для этого. У вас есть образец, которому я могу следовать? Я пробовал что-то сам, но они не работали. (Я плохо разбираюсь в циклах и селекторах запросов) Еще раз спасибо!

Raahim Khan 08.05.2018 20:11
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
64
1

Ответы 1

Трудно дать точное решение, поскольку фрагменты кода, которыми вы поделились, содержат много вызовов функции, контекст которой не ясен ... Я сделал все возможное, чтобы проиллюстрировать, как вы можете делать то, что пытаетесь ... Может быть, это поможет начать работу в правильном направлении:

function handleSubmit(form) {
  // Simulate creation of item using a form
  var name = form.name.value;
  var mobile = form.mobile.value;
  // Generate random pk for demonstration
  var pk = `pk${+new Date()}`;
  var tableBody = document.querySelector('table tbody');
  tableBody.innerHTML += ` <tr>
      <td>
        <label class = "russlabel" onclick = "edit(this)" data-pk = "1" data-field = "name">${name}</label>
        <input class = "editItem" style = "display:none;" />
      </td>
      <td>
        <label class = "russlabel" onclick = "edit(this)" data-pk = "1" data-field = "mobile">${mobile}</label>
        <input class = "editItem" style = "display:none;" />
      </td>
    </tr>`;

  return false;
}

function edit(label) {
  var pk = label.dataset.pk;
  var field = label.dataset.field;
  var input = label.parentElement.children[1]; // Use label.parent.querySelector('input') if DOM is more complex
  label.style = 'display:none;';
  input.style = 'disply:block;';
  input.focus();
  input.value = label.innerHTML;
  input.onchange = function() {
    // pk and field are available here
    // to Update DB state?? not sure how this code works
    //var russen = russ.child(pk);
    //russen.update(  {tekst: inputfelt.value}  )
  }
  input.onblur = function() {
    label.innerHTML = input.value;
    label.style = 'display:block;';
    input.style = 'display:none;';
  }

}
td {
  padding: 0.5rem 0;
  border-bottom: 1px solid black;
}

form {
  margin: 1rem auto;
}
<form id = "entry" onsubmit = "return handleSubmit(this);">
  <input name = "name" placeholder = "Name" />
  <input name = "mobile" placeholder = "mobile" />
  <input type = "submit" value = "Add Entry" />
</form>
<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Mobile</th>
  </thead>
  <tbody>
    <tr>
      <td>
        <label class = "russlabel" onclick = "edit(this)" data-pk = "1" data-field = "name">Tom</label>
        <input class = "editItem" style = "display:none;" />
      </td>
      <td>
        <label class = "russlabel" onclick = "edit(this)" data-pk = "1" data-field = "mobile">1234</label>
        <input class = "editItem" style = "display:none;" />
      </td>
    </tr>
  </tbody>
</table>

Некоторые примечания:

  1. Может быть хорошей идеей прочитать / освежить в памяти JS Events здесь и реорганизовать встроенные обработчики событий - это затрудняет обслуживание, чтение, рассуждение, отладку вашего кода и, как правило, плохая идея.

  2. То же самое и со встроенными стилями - избегайте их. Попробуйте вместо этого использовать классы с поддерживающими стилями в таблице стилей. (Например, щелкнув метку, мы могли бы добавить класс active к элементу td, который, в свою очередь, автоматически скрывает метку и показывает ввод.

  3. Переназначать слушателей входам каждый раз при нажатии на ярлык - плохая практика. Эту же функциональность можно реализовать более простым и изящным образом, используя что-то вроде Делегирование событий.

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