1

(20 відповідей, залишених у JavaScript, TypeScript, ECMAScript)

FakiNyan написав:

все, що вам треба, це вішати обробник натискання на щойно склоновану кнопку

Геніально і просто!
Дякую!

2

(20 відповідей, залишених у JavaScript, TypeScript, ECMAScript)

koala написав:

Є така штука, як MutationObserver. Але краще переформулюйте питання - швидше за все, він вам не потрібен, ви щось інше намагаєтеся зробити.

В мене є елемент, який клонується.
І мені необхідно, щоб кнопка видалення, яка знаходиться в даному елементі була активна на всіх клонах.
Але потрібно поставити якусь умову чи метод, яка буде реагувати на зміну кількості елементів в html і перезапускати цикл.

Зараз займусь пошуком інфу по MutationObserver, подивимося що це за звір такий.

3

(20 відповідей, залишених у JavaScript, TypeScript, ECMAScript)

FakiNyan написав:

Проблема в тому, що цикл, в котрому ви додаєте до кнопок обробники натискання, спрацьовує лише один раз, на самому початку роботи коду. Коли ви натискаєте на кнопку, щоб додати ще один елемент - на кнопку цього елемента обробник натискання не вішається.

Охх, дякую за поясненя. Можли ви тоді підкажете, якою подією, чи яким чином можливо виявити зміну в html? 
Тому що мій мозок перше що зміг придумати, це використання setInterval.  І я сам розумію що це не сама розумна ідея за сьогодні(○_○)

4

(20 відповідей, залишених у JavaScript, TypeScript, ECMAScript)

FakiNyan написав:

ви сюди на дівчат помандражирувати прийшли, чи програмізьму навчатись?
я вас раніше попросив надати html до цього коду

Охх, а головне я знову прогавив.

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>

  <link rel="stylesheet" href="style.css" type="text/css">


</head>

<body>
  <div id="allProject">
    <div id="openBlock">
      <div id="leftTextBlock" class="allBlock">
        <ul id="leftText" class="textUl">
          <li class="styleLi">Text
          <div class="btnLi">
            <input type="button"class="inputbtn favorite" >
            <input type="button" class="inputbtn delete" >
          </div></li>
          <li class="styleLi">Text
          <div class="btnLi">
            <input type="button"class="inputbtn favorite" >
            <input type="button" class="inputbtn delete" >
          </div></li>
          <li class="styleLi">Text
          <div class="btnLi">
            <input type="button"class="inputbtn favorite" >
            <input type="button" class="inputbtn delete" >
          </div></li>
        </ul>

      </div>

      <div id="rightTextBlock" class="allBlock">
        <ul id="rightText" class="textUl"></ul>
      </div>

    </div>

    <div id="bottomLine">
      <input type="button" name="" id="addLi" value="Add new Li">
    </div>

  </div>

</body>
<script type="text/javascript" src="script.js">
</script>

</html>

5

(20 відповідей, залишених у JavaScript, TypeScript, ECMAScript)

FakiNyan написав:

ось ці

document.getElementById("addLi").onclick = function () {
  var listLi = document.getElementById("leftText").lastElementChild;
  var cln = listLi.cloneNode(true);
  document.getElementById("leftText").appendChild(cln);
}

var buttonClick = document.getElementsByClassName('delete');
for (i = 0; i < buttonClick.length; i++) {
  buttonClick[i].onclick = function () {
    var listLi = document.getElementById("leftText");
    var li = listLi.lastElementChild;
    if (li != null) {
      listLi.removeChild(li);
    }
  }
}

Не могли б Ви мені все ж підказати, в чому моя помилка?)

6

(20 відповідей, залишених у JavaScript, TypeScript, ECMAScript)

FakiNyan написав:
asdwhitefox написав:
leofun01 написав:

asdwhitefox, за відсутність відступів вам руки відірвати треба. Виправте код.

Не зовсім зрозумів про які відступи йде річ.

яка річ у вас йде? мова йде!

Словник української мови
Академічний тлумачний словник (1970—1980)
РІЧ 2, речі, жін., розм. Те саме, що мова

Дякую за пояснення. Для вирівнювання надаю перевагу плагіну beautify.
Але в момент відправки їм не скористався.

7

(20 відповідей, залишених у JavaScript, TypeScript, ECMAScript)

leofun01 написав:

asdwhitefox, за відсутність відступів вам руки відірвати треба. Виправте код.

Не зовсім зрозумів про які відступи йде річ.

8

(20 відповідей, залишених у JavaScript, TypeScript, ECMAScript)

Оххх, і не замітив! Дякую.
Можливо підкажете ще один ньюанс?
Якщо я клоную елемент, то в клонованих елементах створений інпут delete ніяк не реагує.
Працює тільки на першому елементі li .


document.getElementById("addLi").onclick = function () {
var listLi = document.getElementById("leftText").lastElementChild;
var cln = listLi.cloneNode(true);
document.getElementById("leftText").appendChild(cln);
}

var buttonClick = document.getElementsByClassName('delete');
 for (i=0; i< buttonClick.length; i++){
 buttonClick[i].onclick = function()
{
var listLi = document.getElementById("leftText");
var li = listLi.lastElementChild;
if( li != null){listLi.removeChild(li);
}
}
}

Вітаю.
Підкажіть будьласка, чому через getElementsByClassName при спробі видалити елемент вибиває помилку:
Uncaught ReferenceError: listLi is not defined at HTMLInputElement.buttonClick.<computed>.onclick

js code:

var buttonClick = document.getElementsByClassName('delete');
for (i = 0; i < buttonClick.length; i++) {
    buttonClick[i].onclick = function() {
        var lisrLi = document.getElementById("leftText");
        var li = lisrLi.lastElementChild;
        if(li != null) {
            listLi.removeChild(li);
        }
    }
}

HTML:

<ul id="leftText" class="textUl">
    <li class="styleLi">Text
        <div class="btnLi">
            <input type="button"class="inputbtn favorite" >
            <input type="button" class="inputbtn delete" >
        </div>
    </li>
</ul>
Оригінал

js code:

var buttonClick = document.getElementsByClassName('delete');
 for (i=0; i< buttonClick.length; i++){
 buttonClick[i].onclick = function()
{
var lisrLi = document.getElementById("leftText");
var li = lisrLi.lastElementChild;
if( li != null){listLi.removeChild(li);
}
}
}

HTML:

<ul id="leftText" class="textUl">
          <li class="styleLi">Text
          <div class="btnLi">
            <input type="button"class="inputbtn favorite" >
            <input type="button" class="inputbtn delete" >
          </div></li>
        </ul>

Хмм, потрібно спробувати. Доречна ідея.

FakiNyan написав:

тоді вішайте лістенер на document, і блокуйте бульбашкування, після натиснення на хворму

Області.. Якщо ви подивитесь на css то зрозумієте, що окрім одного центрального блоку вся область пуста. Не хочеться закивати всі вільні області блоками.  Ось і шукаю рішення.
Схоже прийдеться робити два не повязаних одне з одним блоки, з z-index. І накласти один на одного.

Дякую, але це не те що мені потрібно. Я не хочу робити кнопку для закриття ні в формі ні де інде.
Я хочу зробити, щоб при натисканні на прозору область блок закривався.
І я розумію що можна обьеднати декілька блоків з однією дією, по типу з верху з низу і по бокам цього блоку.
Але не хочется робити Франкенштейна.

ось css:

.Form{
    width: 100vw;
    height: 100vh;
    position: absolute;
    background-color: rgba(255, 255, 255, 0.8);
    display: flex;
    align-items: center;
    justify-content: center;
}
.FormBox{
   width:700px;
    height: 400px;
    background-color: rebeccapurple;
   
}




Altair8800 написав:

Тому що FormBox всередині батьківського об'єкту, на якому повішена подія onClick, яка спрацьовує на всьому його контенті.
Зробіть щось типу такого:

<div onClick={this.AddApp}>Toggle Collapse</div>
<div className="Form">
        <div className="FormBox"></div>
        </div>

І не пишіть такі кощунства з селекторами. Використовуйте toogle, на крайній випадок атрибут style зі станом this.state.YourValName, яке підставлятиме потрібне значення.

При натисканні на кнопку display none змінюється на flex.
Розгортається блок, в середині якого інші елементи.
По ідеї блок Form це фоновий блок, при натисканні на який вся форма повинна згортатись.
Але з внутрішніми блоками можна було б працювати.
В моєму ж випадку при натисканні на внутрішній блок FormBox спрацьовує onClick з Form.
Підкажіть будьласка в чому моя помилка.
Бібліотека React
html:
<div className="Form" onClick={this.AddApp}>
        <div className="FormBox"></div>
        </div>

js:
  AddApp(){
        var a = document.querySelector(".Form").style.display;
        if(a=="flex"){document.querySelector(".Form").style.display="none"}
        else {document.querySelector(".Form").style.display="flex"}
       
    };