2016-11-29 47 views
2

向列表添加新项目时,我希望它根据输入值更改颜色。将样式颜色添加到添加的li - Javascript

如何将input.value添加到我新添加的li项目中?

我创建了一个codepen是否有人能够帮助 http://codepen.io/o-sewell/pen/mOBjvQ

// DIV TOGGLE 
const toggleButton = document.querySelector('#toggleList'); 
const listDiv = document.querySelector('.list'); 

// User INPUT 
const userInput = document.querySelector('.userInput'); 
const button = document.querySelector('button.description'); 
const p = document.querySelector('p.description'); 
let listItem = document.querySelectorAll('li'); 

// ADD ITEM 
const addItemInput = document.querySelector('.addItemInput'); 
const addItemButton = document.querySelector('button.addItemButton'); 

button.addEventListener('click',() => { 
    for (let i = 0; i < listItem.length; i++) { 
    listItem[i].style.color = userInput.value; 
    } 

    p.innerHTML = userInput.value + ':'; 
}); 

toggleButton.addEventListener('click',() => { 
    if (listDiv.style.display == 'none') { 
    listDiv.style.display = 'block'; 
    toggleButton.textContent = 'Hide list'; 
    } else { 
    listDiv.style.display = 'none'; 
    toggleButton.textContent = 'Show list'; 
    } 
}); 

addItemButton.addEventListener('click',() => { 
    let list = document.querySelector('ul'); 
    let li = document.createElement('li'); 

    li.textContent = addItemInput.value; 
    let appendedItem = list.appendChild(li); 

    console.log(appendedItem); 

    for (let i = 0; i < appendedItem.length; i++) { 
    appendedItem[i].style.color = userInput.value; 
    } 

    console.log(appended item); 

    addItemInput.value = ''; 
}); 
+0

你可以使用jQuery吗? –

+0

@PraveenKumar原生JavaScript更好! */rants * – Roberrrt

+1

@Roberrrt jQuery *是用原生JS编写的。 ';)' –

回答

1

的答案很简单。

您正在定义js执行时的初始列表,但新元素是动态创建的。因此,您必须根据所有元素(包括新元素)创建新的节点列表。你可以简单地重新定义它当前点击事件中:

button.addEventListener('click',() => { 
    listItem = document.querySelectorAll('li'); 
    for(let i = 0; i < listItem.length; i++) { 
     listItem[i].style.color = userInput.value; 
    } 
    p.innerHTML = userInput.value + ':'; 
}); 

为了给它的颜色与现有的相同,更改此功能直接应用这些造型的最新添加的元素:

addItemButton.addEventListener('click',() => { 
    let list = document.querySelector('ul'); 
    let li = document.createElement('li'); 
    li.textContent = addItemInput.value; 
    let appendedItem = list.appendChild(li); 
    appendedItem.style.color = userInput.value; 
    addItemInput.value = ''; 
}); 

Working codepen example

+1

嗨罗伯特,我想添加输入值到新的附加列表项。所以,当我添加一个新的列表项目,它将是input.value的颜色上面 –

+0

你的意思是,附加*颜色*你想改变? – Roberrrt

+0

@ O.Sewell啊,我已经更新了我的答案。 – Roberrrt

2

这里是新的:

//DIV TOGGLE 
const toggleButton = document.querySelector('#toggleList'); 
const listDiv = document.querySelector('.list'); 
var lastPickedColor = "black"; // it will store the last picked color 
//User INPUT 
const userInput = document.querySelector('.userInput'); 
const button = document.querySelector('button.description'); 
const p = document.querySelector('p.description'); 
let listItem = document.querySelectorAll('li'); 

//ADD ITEM 
const addItemInput = document.querySelector('.addItemInput'); 
const addItemButton = document.querySelector('button.addItemButton'); 

button.addEventListener('click',() => { 
    lastPickedColor = userInput.value; 
    for(let i = 0; i < listItem.length; i++) { 
    listItem[i].style.color = lastPickedColor; 
    } 
    p.innerHTML = userInput.value + ':'; 
}); 

toggleButton.addEventListener('click',() => { 
    if (listDiv.style.display == 'none') { 
    listDiv.style.display = 'block'; 
    toggleButton.textContent = 'Hide list'; 
    } else { 
    listDiv.style.display = 'none'; 
    toggleButton.textContent = 'Show list'; 
    } 
}); 

addItemButton.addEventListener('click',() => { 
    let list = document.querySelector('ul'); 
    let li = document.createElement('li'); 
    li.style.color = lastPickedColor; // so it will add li with last picked color 
    li.textContent = addItemInput.value; 
    let appendedItem = list.appendChild(li); 
    console.log(appendedItem); 
    for(let i = 0; i < appendedItem.length; i++) { 
    appendedItem[i].style.color = userInput.value; 
    } 
    console.log(appendeditem); 
    addItemInput.value = ''; 
}); 

无论何时改变颜色,我都会将lastPickedColor变量添加到页面的顶部,它将存储lastPickedColor和所有添加此颜色的列表。

+1

我没有投票这个Erol,它确实工作,我想要的。谢谢 ! :-),我不知道为什么它是 –

+0

好吧,先生,抱歉误会:)我也谢谢你。 –

+1

我不知道为什么,但是因为你的投票低于其他答案而只是愚蠢。 – Roberrrt

0

所以我对你的代码做了两处修改。请参阅 http://codepen.io/amoolya/pen/GNMXqa?editors=1111

首先改变

addItemButton.addEventListener('click',() => { 
     let list = document.querySelector('ul'); 
     let li = document.createElement('li'); 
     li.textContent = addItemInput.value; 
     let appendedItem = list.appendChild(li); 
     appendedItem.style.color = list.firstElementChild.style.color; //The newly appended item is given the color of the first list element. In your case, this would be whatever color the user chose last. 
    }); 

第二个变化:

我加

 document.querySelectorAll('li'); 

事件处理程序中的颜色变化按钮,这样每次的长度新的列表被计算。