Open NickColley opened 4 years ago
This issue is related so changing how we detect changes could fix two issues: https://github.com/alphagov/govuk-frontend/issues/1028
It's also worth noting that custom elements (web components) cover these sorts of cases.
Also related: https://github.com/alphagov/govuk-frontend/issues/1530
I spiked the idea of using Object.defineProperty to watch value and it seems to work but I don't know how much of a good idea it is, feels risky.
I've also found out that MutationObservers only can detect changes in attributes not properties so may not work for values.
I've created to show that only attribute changes can be observed: https://jsbin.com/qajudohulo/edit?js,console,output
Custom elements allow property to be observed:
https://jsbin.com/yeduzof/2/edit?html,js,console,output
Patching the dom element with Object.defineProperty (IE9+):
@nickcolley to look into other approaches for another hour.
I think this may have been fixed by https://github.com/alphagov/govuk-frontend/pull/1868
I've adapted Nick's old Glitch with similar code but now pulling in GOVUK Frontend 3.8.0. The problem seems to be resolved once that new version is being used.
I think this also means that this related issue with checkboxes is fixed too.
Glitch here: https://lyrical-hilarious-fir.glitch.me/
@36degrees @hannalaakso what do you think - are you happy for me to close these issues?
I think it's only looks like it's fixed because the example now updates the textarea value after the init
function is called but before the pageshow
event fires.
If you change the value after the pageshow
event, for example by setting $textarea.value
using the console after the page has fully loaded, the character count message still does not update.
This was raised by a user:
I have reproduced this with the following code:
You can see a live example here: https://govuk-frontend-issue-1677.glitch.me
The count message is only updated when the component is focused:
https://github.com/alphagov/govuk-frontend/blob/cfca85f6f336aa21d1a6fcc496ffc459480278e0/src/govuk/components/character-count/character-count.js#L96-L97
So right now you need to either run
characterCountInstance.checkIfValueChanged();
manually after you've updated the value programmatically for it to be checked.