I've played around with this a bit. I've culled things down to some minimal code for testing <input type="number" name="attr_COMinit" value="0" /> <input type="number" name="attr_CNSinit" value="0" /> <input type="number" name="attr_COMinit2" value="0" /> <input type="number" name="attr_CNSinit2" value="0" /> <br> <input type="number" name="attr_COM" value="0" readonly /> <input type="number" name="attr_CNS" value="0" readonly /> <input type="number" name="attr_COM2" value="0" readonly /> <input type="number" name="attr_CNS2" value="0" readonly /> <script type="text/worker"> on("change:cominit", function(eventInfo){ getAttrs(["COMinit","COMproglib"], function(values) { console.log(eventInfo.sourceAttribute); var init = parseInt(values.COMinit) || 0; setAttrs({ COM: init }); }); }); on("change:cnsinit", function(eventInfo){ getAttrs(["CNSinit","CNSproglib"], function(values) { console.log(eventInfo.sourceAttribute); var init = parseInt(values.CNSinit) || 0; setAttrs({ CNS: init }); }); }); on("change:cominit2", function(eventInfo){ getAttrs(["COMinit2","COMproglib2"], function(values) { console.log(eventInfo.sourceAttribute); var init = parseInt(values.COMinit2) || 0; setAttrs({ COM2: init }); }); }); on("change:cnsinit2", function(eventInfo){ getAttrs(["CNSinit2","CNSproglib2"], function(values) { console.log(eventInfo.sourceAttribute); var init = parseInt(values.CNSinit2) || 0; setAttrs({ CNS2: init }); }); }); </script> Custom Jumpgate game; The first and third column always fails to trigger the worker. I can swap the column positions in the html and the first input of the first and third column always fails to trigger. Every odd column fails to trigger the sheetworker. I have no clue why... I've removed all sheet css and this happens in legacy and CSE. Custom Non-Jumpgate game; inputs trigger the worker as expected.