'How can I change the inline javascript code to plain javascript code in the js file?

I am currently learning js and I'm making a chrome extension.
After finishing the tutorial, I want to add more features for the extension. And I did it!
You can see down below, I added buttons to delete the corresponding list.
What I added

However, when i deploy the extension, it couldn't work. And i found out that the problem is chrome extensions don't allow you to have inline JavaScript.
And i have no idea how to convert the code to plain js.

Here is my code which will render the list of items in the form of html.
<ul id="uls"></ul>

const ulElement = document.getElementById('uls');

function render(lists) {
    let listItems = ''
    for (let i = 0; i < lists.length; i++) {
        listItems += `
            <li>
                <button class='remove_data ${i}' onclick=getValue(this)>x</button>
                <a target='_blank' href='${lists[i]}'>
                    ${lists[i]}
                </a>
            </li>
        `
    }
    ulElement.innerHTML = listItems;
}

This is the js code that make the delete function.

const buttons = document.getElementsByClassName('remove_data');
let myWebsites = []

function getValue(element) {
    index = parseInt(element.className.split(' ')[1])
    deleteItem(index)

function deleteItem(index) {
    myWebsites.splice(index, 1)
    localStorage.setItem('myWebsites', JSON.stringify(myWebsites));
    render(myWebsites);
}

These code works fine in my live server. However, it couldn't work in chrome extension as there is onclick=getValue(this) in the html.
Can someone tell me how to convert it to js? Appreciate your help!



Solution 1:[1]

It's because you're using the onclick attribute, which uses inline JavaScript.

You can parse the HTML, then use addEventListener to add a click event listener to the button:

const ulElement = document.getElementById('uls');

function render(lists) {
    uiElement.innerHTML = '';
    for (let i = 0; i < lists.length; i++) {
            let li = document.createElement('li');
            li.innerHTML = `<li>
                <button class='remove_data ${i}'>x</button>
                <a target='_blank' href='${lists[i]}'>
                    ${lists[i]}
                </a>
            </li>`;
            li.querySelector('button').addEventListener('click', function(){
                getValue(this);
            }
        `
    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Spectric