Проблема с приложением списка дел и длиной элемента списка

Я работаю над приложением Q/A barebone todolist и замечаю, что когда в список добавляется очень длинный элемент списка, он нажимает кнопку.

Есть ли способ увеличить размер элемента LI, когда текстовый узел касается поля кнопки, вместо того, чтобы нажимать кнопку из элемента LI. Ниже приведен скриншот. Я опубликую свой исходный код ниже, но, может быть, это вопрос, который можно быстро решить?

Проблема с приложением списка дел и длиной элемента списка

Мой исходный код можно найти здесь - Проблема с плавающими кнопками справа от моего списка дел

Просто сделайте так, чтобы текст переполнялся по ширине, чтобы кнопка оставалась на том же месте.

manny 09.03.2019 18:24

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

Avinash Karhana 09.03.2019 18:25

@AvinashKarhana Возможно, мне придется изменить способ назначения кнопок ли. Кнопки являются дочерними элементами LI

noobcoderiam 09.03.2019 18:33
Поведение ключевого слова "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
3
249
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Хорошо, я обернул текст внутри элемента li с элементом span и добавил, что добавляю отображение сетки в li и даю каждому элементу внутри liwidth, а затем я добавил word-break: break-word;, чтобы строка разорвалась, когда текст span достигнет ширины ограничение и не влияет на удаление button, и я удалил height из li, поэтому li будет расти вместе с линиями на нем

var addItemButton = document.getElementById('addItem')
var onEnter = document.getElementById('newNote')


//below event listener adds an item to the list on click
addItemButton.addEventListener('click', function() {
  let item = document.getElementById('newNote').value
  let node = document.createElement("li")
  let span = document.createElement("span")
  let textnode = document.createTextNode(item)

  span.appendChild(textnode)
  node.appendChild(span)
  if (item) {
    document.getElementById('list-body').appendChild(node)
  }


  let node2 = document.createElement('BUTTON')
  let textnode2 = document.createTextNode('Delete')
  node2.appendChild(textnode2)
  node.appendChild(node2)

  node2.addEventListener('click', function() {
    node2.parentNode.parentNode.removeChild(node)
  });

  document.getElementById('newNote').value = ''
});


onEnter.addEventListener('keyup', function(event) {
  if (event.keyCode === 13) {
    // Cancel the default action, if needed
    event.preventDefault();
    // Trigger the button element with a click
    addItemButton.click();
  }
})


function applyButton() { //onload for dummy data or data from db
  let getListObjects = document.querySelectorAll("li")

  for (let i = 0; i < getListObjects.length; i++) {

    let node2 = document.createElement('BUTTON')
    let textnode2 = document.createTextNode('Delete')
    node2.appendChild(textnode2)

    getListObjects[i].appendChild(node2)

    let y = getListObjects[i].querySelector('button')
    y.addEventListener('click', function() {
      y.parentNode.parentNode.removeChild(getListObjects[i])
    });

  }
}
.container {
  height: 100%;
  width: 40%;
  margin: 0 auto;
}

.container2 {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  background-color: grey;
  border: 1px solid grey;
}

#main-grid {
  width: 100%;
}

#newNote {
  height: 25px;
}

#inputIdForGrid {
  justify-content: left;
  align-items: center;
  display: flex;
  padding-left: 0.3em;
  padding-top: 0.5em;
  padding-bottom: 0.5em;
}

button {
  padding: 10px 18px;
  background-color: green;
  border: none;
  color: white;
  font-size: 14px;
  align-self: center;
  justify-self: end;
}

#addItem {
  margin-left: 1em;
  padding: 0.5em;
  color: white;
  font-size: 1.5em;
  float: right;
}

ul {
  list-style-type: none;
  padding: 0px;
  margin: 0px;
}

li {
  padding: 5px 15px;
  display: grid;
  grid-template-columns: 2.5fr .5fr;
}

span {
  word-break: break-word;
  grid-column: 1 / 2;
  display: flex;
  align-items: center;
}

li:nth-child(2n) {
  background-color: grey;
}

li>button {
  background-color: red;
}

h1 {
  text-align: center
}
<body onload = "applyButton()">
  <h1>Vanilla JS ToDo List - No Jquery, No Bootstrap</h1>
  <div class='container'>
    <div id='main-grid'>
      <div class = "container2">
        <div id='inputIdForGrid'>
          <input type='text' placeholder = "Enter List Items Here" id='newNote'>
        </div>
        <div>
          <a href='#' id = "addItem">Hi</a>
        </div>
      </div>

      <ul id='list-body'>
        <li><span>run all around town. walk all around town. drive all around town</span></li>
        <li><span>Buy Apples</span></li>
        <li><span>Hit Gym and Lift Bro</span></li>
        <li><span>Stretch</span></li>
      </ul>
    </div>
  </div>
</body>

P.S. Я отредактировал ваш js-код, чтобы он сгенерировал span и добавил текст внутри него.

я взгляну на все, что вы сделали, и разберу это, чтобы увидеть, как вы заставили все это работать. Я ценю ответ.

noobcoderiam 09.03.2019 19:56

Ничего страшного, я вообще ничего не делал :)

Hosam 09.03.2019 20:04
Ответ принят как подходящий

A) Если я вас правильно понял, вы можете легко исправить это с помощью CSS-Grid:

li {
  display: grid;
  grid-template-columns: 3fr 100px;
  grid-template-areas: 'text button';
}

li > span {
  grid-area: text;
}

li > button {
  grid-area: button;
  height: 30px;
}

https://jsfiddle.net/axqwhj29/

Поэкспериментируйте с приведенным выше примером, изменив размер области результатов, чтобы убедиться, что это то, что вы ищете.

B) Кроме того, но я не рекомендую вам, если вы действительно не хотите менять свою высоту li и у вас есть максимальная ширина текста (например, 25 символов), вы можете вырезать части своего сообщения в вертикальном виде телефона и если пользователь переворачивается в горизонтальное положение, автоматически отображается весь текст.

https://jsfiddle.net/qfy3mz01/

Надеюсь, это поможет :)

человек, миф, легенда, нет бога, gengs. Лол, а если серьезно, то я именно об этом и говорил. Я новичок в сетке, поэтому все еще не уверен в чем-то. Я поиграю с этим. Я просто заглянул в области шаблонов

noobcoderiam 10.03.2019 03:57

хахаха. Лол, я так рад, что мой код помог вам, noobcoderiam ^^ Пожалуйста, не могли бы вы нажать на «Этот ответ полезен» выше, чтобы помочь другим в будущем или/и пометить как решенный :) CSS Grid — мощный инструмент, и его действительно легко проверить из этого: youtu.be/7kVeCqQCxlk

gengns 10.03.2019 05:00

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