This issue seems to be inherent in the way panelPopup was designed. Both the client side and server side versions serialize the open/closed state in a hidden input which can be posted to the server, and the server renders the open/closed state for both client side and server side versions.
In the client-side demo, when the user selects an item, a form post is sent to the server, and the server updates the popup state to 'open'. Then user then closes the popup, but the server is not updated as it's just a client side event. The 'closed' state is serialized to the hidden input. But when the user navigates to another demo, the hidden input is not sent in the form post as it's in a different form. Thus, the server and client states become unsynchronized. There's really no way to keep them synchronized if using different forms.
This issue wasn't seen in the 1.3 version because the demo at that time because the demo had been using a 'button' element, rather than a 'a' element, as it is now. The button element causes a form post, so the demo in 1.3 wasn't really client side, as the server was being updated with the client-side state.
We should make the client side popup completely client side. The server should always render the client side popup in a closed state, and it should be up to the developer to make sure that server side interactions don't interfere with the open/closed state of the popup.
This issue seems to be inherent in the way panelPopup was designed. Both the client side and server side versions serialize the open/closed state in a hidden input which can be posted to the server, and the server renders the open/closed state for both client side and server side versions.
In the client-side demo, when the user selects an item, a form post is sent to the server, and the server updates the popup state to 'open'. Then user then closes the popup, but the server is not updated as it's just a client side event. The 'closed' state is serialized to the hidden input. But when the user navigates to another demo, the hidden input is not sent in the form post as it's in a different form. Thus, the server and client states become unsynchronized. There's really no way to keep them synchronized if using different forms.
This issue wasn't seen in the 1.3 version because the demo at that time because the demo had been using a 'button' element, rather than a 'a' element, as it is now. The button element causes a form post, so the demo in 1.3 wasn't really client side, as the server was being updated with the client-side state.
We should make the client side popup completely client side. The server should always render the client side popup in a closed state, and it should be up to the developer to make sure that server side interactions don't interfere with the open/closed state of the popup.