Renderuję takich formularzy takich jak:

trait = (name, dice, mod) => {
    return `
    <tr><form action="#" onsubmit="renderRoll()">
        <td><label>${name}</label></td>
        <td><input type="text" name="dice" value="${dice}"></td>
        <td><input type="text" name="mod" value="${mod}"></td>
        <td><input type="submit" value="Slå" name="roll" ></td>
    </form></tr>`;
};

document.getElementById('content').innerHTML += trait;

Formularze nie mają unikalnego ID: S i zawsze są więcej niż jeden w domu. Jak mogę uruchomić renderRoll() i uzyskać dostęp do wartości wywołanych formularza?

0
Himmators 26 luty 2019, 19:15

2 odpowiedzi

Najlepsza odpowiedź

Musisz przekazać argument wewnątrz funkcji "Rendersolroll ()" do pracy.

<form action="#" onsubmit="renderRoll(event)">

function renderRoll(event) {
//here is your target...
var target = event.target;
alert(target.innerHTML);
}
1
danielarend 26 luty 2019, 16:20

Proponuję użyć unikalnego identyfikatora jako nazwy elementu formularza jak poniżej:

const trait = (id, name, dice, mod) => {
    return `
    <tr><form name="${id}" action="#" onsubmit="renderRoll">
        <td><label>${name}</label></td>
        <td><input type="text" name="dice" value="${dice}"></td>
        <td><input type="text" name="mod" value="${mod}"></td>
        <td><input type="submit" value="Slå" name="roll" ></td>
    </form></tr>`;
};

document.getElementById('content').innerHTML += trait("form", "test", "test", "test");

I użyj danych formularza, gdy formularz wywołał:

function renderRoll() {
    let data = document.forms.namedItem("form").elements;
    data = [...data].map(({name, value}) => ({name, value}));

    console.log(data)
}

Mam nadzieję, że będzie przydatne.

0
Ali Torki 26 luty 2019, 16:39