Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

setAttr disable input with text like "+1 something"

January 13 (6 years ago)

Hi guys,


I'm trying to build a custom character sheet with the following feature : a player can select a character in a list ("select" tag), and it should update some disabled input ("input" tag).

I followed the method I found here : https://wiki.roll20.net/Sheet_Worker_Scripts#setAttrs.28values.2Coptions.2Ccallback.29_.5BAsynchronous.5D

I face one problem : when the value I need to update is like "+1 au dé de combat", it just write "1" in the disabled input. I tried some escape things, or to put some special characters, but it's not doing it .. can I do that, and how ?


Damien

January 13 (6 years ago)

Edited January 13 (6 years ago)
GiGs
Pro
Sheet Author
API Scripter

It's hard to guess without seeing your code. It could be that you are using parseInt so the text part is being dropped, your input might be a number type instead of text, and numerous other possibilities. Also sheet workers cant updated disable inputs, they should be set to readonly if you dont want players to interact with them.

Can you post the html for the select and the input, as well as the sheet worker?

January 13 (6 years ago)

There it is !

The "+1 erg" is just displaying "1".


<script type="text/worker">

    const characterData = {

    "Ann": {

        "competence1" : "Soif de sang : Mêlée",

        "competence2" : "Une action en plus",

    "competence3_1" : "Une action de Magie gratuite en plus",

    "competence3_2" : "Une action de Mêlée gratuite en plus",

    "competence4_1" : "Une action de Combat gratuite en plus",

    "competence4_2" : "1points ajouté au résultat du dé de Combat",

    "competence4_3" : "Sur un 6 : +1 au dé de Combat"

    },

    "Arnaud" : {

        "competence1": "Une action de Fouille gratuite en plus",

        "competence2" : "Une action en plus",

    "competence3_1" : "Un dé de Mêlée en plus",

    "competence3_2" : "Une action de Déplacement gratuite en plus",

    "competence4_1" : "+1 erg'",

    "competence4_2" : "reg",

    "competence4_3" : "ergerg"

    }

    }


    on("sheet:opened change:nom_personnage", function() {

        getAttrs(["nom_personnage"], function(value) {

            if (value.nom_personnage in characterData) {

                console.log("Mise en place des paramètres de '" + value.nom_personnage + "'");

                competence1 = characterData[value.nom_personnage]["competence1"];

                competence2 = characterData[value.nom_personnage]["competence2"];

                competence3_1 = characterData[value.nom_personnage]["competence3_1"];

                competence3_2 = characterData[value.nom_personnage]["competence3_2"];

                competence4_1 = characterData[value.nom_personnage]["competence4_1"];

                competence4_2 = characterData[value.nom_personnage]["competence4_2"];

                competence4_3 = characterData[value.nom_personnage]["competence4_3"];

            } else {

                console.log("Mise en place des paramètres vides");

                competence1 = "--";

                competence2 = "--";

                competence3_1 = "--";

                competence3_2 = "--";

                competence4_1 = "--";

                competence4_2 = "--";

                competence4_2 = "--";

            }

            setAttrs({ foo_competence1: competence1 });

            setAttrs({ foo_competence2: competence2 });

            setAttrs({ foo_competence3_1: competence3_1 });

            setAttrs({ foo_competence3_2: competence3_2 });

            setAttrs({ foo_competence4_1: competence4_1 });

            setAttrs({ foo_competence4_2: competence4_2 });

            setAttrs({ foo_competence4_3: competence4_3 });

        });

    });

</script>


<select name="attr_nom_personnage" id="attr_nom_personnage">

    <option value="" selected>-- Choisir un personnage --</option>

    <option value="Ann">Ann</option>

    <option value="Arnaud">Arnaud</option>

</select>


<table>

    <tr>

        <td>

            <input type="hidden" name="attr_foo_competence1" value="0" />

            <input type="text" name="attr_competence1" value="@{foo_competence1}" disabled="true"/>

        </td>

        <td>

            <input type="hidden" name="attr_foo_competence2" value="0" />

            <input type="text" name="attr_competence2" value="@{foo_competence2}" disabled="true"/>

            </td>

        <td>

            <input type="hidden" name="attr_foo_competence3_1" value="0" />

            <input type="text" name="attr_competence3_1" value="@{foo_competence3_1}" disabled="true"/>

        </td>

        <td>

            <input type="hidden" name="attr_foo_competence4_1" value="0" />

            <input type="text" name="attr_competence4_1" value="@{foo_competence4_1}" disabled="true"/>

        </td>

    </tr>

    <tr>

        <td colspan="2" rowspan="2">&nbsp;&nbsp;&nbsp;&nbsp;</td>

        <td>

            <input type="hidden" name="attr_foo_competence3_2" value="0" />

            <input type="text" name="attr_competence3_2" value="@{foo_competence3_2}" disabled="true"/>

        </td>

        <td>

            <input type="hidden" name="attr_foo_competence4_2" value="0" />

            <input type="text" name="attr_competence4_2" value="@{foo_competence4_2}" disabled="true"/>

        </td>

    </tr>

    <tr>

        <td>&nbsp;</td>

        <td>

            <input type="hidden" name="attr_foo_competence4_3" value="0" />

            <input type="text" name="attr_competence4_3" value="@{foo_competence4_3}" disabled="true"/>

        </td>

    </tr>

</table>




January 13 (6 years ago)

That said I will try the readonly method tomorrow.

January 14 (6 years ago)

Edited January 14 (6 years ago)
GiGs
Pro
Sheet Author
API Scripter

I'm guessing your error is being caused by the disabled inputs. When you create a number type , disabled input, roll20 treats it as a calculation, so it is trying to convert the data in your hidden inputs into a number. I'm not 100% sure, but that would be my guess.

You can change your inputs from this:

<input type="hidden" name="attr_foo_competence1" value="0" />
<input type="text" name="attr_competence1" value="@{foo_competence1}" disabled="true"/>

to this:

<input type="text" name="attr_competence1" value="--" readonly />
The hidden input isn't necessary.

Your sheet worker looks structurally okay, except for the setAttrs. It's always best to use a single setAttrs function, so instead of this:
            setAttrs({ foo_competence1: competence1 });
            setAttrs({ foo_competence2: competence2 });
            setAttrs({ foo_competence3_1: competence3_1 });
            setAttrs({ foo_competence3_2: competence3_2 });
            setAttrs({ foo_competence4_1: competence4_1 });
            setAttrs({ foo_competence4_2: competence4_2 });
            setAttrs({ foo_competence4_3: competence4_3 });
Try this:
               setAttrs({ foo_competence1: competence1,
                          foo_competence2: competence2,
                          foo_competence3_1: competence3_1,
                          foo_competence3_2: competence3_2,
                          foo_competence4_1: competence4_1,
                          foo_competence4_2: competence4_2,
                          foo_competence4_3: competence4_3
});

But you can do something simpler, since your data is already stored in the format that setAttrs needs, you can do this (untested):

<script type="text/worker">
const characterData = {
"Ann": {
"competence1" : "Soif de sang : Mêlée",
"competence2" : "Une action en plus",
"competence3_1" : "Une action de Magie gratuite en plus",
"competence3_2" : "Une action de Mêlée gratuite en plus",
"competence4_1" : "Une action de Combat gratuite en plus",
"competence4_2" : "1points ajouté au résultat du dé de Combat",
"competence4_3" : "Sur un 6 : +1 au dé de Combat"
},
"Arnaud" : {
"competence1" : "Une action de Fouille gratuite en plus",
"competence2" : "Une action en plus",
"competence3_1" : "Un dé de Mêlée en plus",
"competence3_2" : "Une action de Déplacement gratuite en plus",
"competence4_1" : "+1 erg'",
"competence4_2" : "reg",
"competence4_3" : "ergerg"
}
};
on("sheet:opened change:nom_personnage", function() {
getAttrs(["nom_personnage"], function(value) {
let competence = {
"competence1" : "--",
"competence2" : "--",
"competence3_1" : "--",
"competence3_2" : "--",
"competence4_1" : "--",
"competence4_2" : "--",
"competence4_3" : "--"
}
if (value.nom_personnage in characterData) {
console.log("Mise en place des paramètres de '" + value.nom_personnage + "'");
competence = characterData[value.nom_personnage];
} else {
console.log("Mise en place des paramètres vides");
}
setAttrs(competence);
});
});
</script>


January 14 (6 years ago)

It works like a charm !

And I get rid of the hidden input, great !

January 14 (6 years ago)
GiGs
Pro
Sheet Author
API Scripter

Great!