It is relatively simple to dynamically create a dropdown from which you can jump to different parts of a page using JavaScript and ATG DSPEL.
First create the dropdown.
<form name="jumpTo" action="."> <dspel:droplet name="/atg/dynamo/droplet/ForEach"> <dspel:param name="array" param="categories"/> <dspel:setvalue param="category" paramvalue="element"/> <dspel:oparam name="outputStart"> <select name="names"> </dspel:oparam> <dspel:oparam name="output"> <dspel:getvalueof id="index" param="index"/> <c:set var="catShortName" value="cat${index}"/> <option value="<c:out value="${catShortName}"/>"> <dspel:valueof param="category.name"/> </option> </dspel:oparam> <dspel:oparam name="outputEnd"> </select> </dspel:oparam> </dspel:droplet> </form>
Next create the button outside of the form for jumping to different parts of the page. I learned about the window.location.hash from this article. And I learned about how to access the selected value from the dropdown from this article.
<input type="image" src="/img/buttons/update.gif" onClick="window.location.hash= document.jumpTo.names.options[document.jumpTo.names.selectedIndex].value">
Finally you create the name anchors throughout your document.
<dspel:droplet name="/atg/dynamo/droplet/ForEach"> <dspel:param name="array" param="categories"/> <dspel:setvalue param="category" paramvalue="element"/> <dspel:oparam name="output"> <%-- magazine category --%> <dspel:getvalueof id="index" param="index"/> <c:set var="catShortName" value="cat${index}"/> <a name="<c:out value="${catShortName}"/>" id="<c:out value="${catShortName}"/>"> <dspel:valueof param="category.name"/> </a> </dspel:oparam> </dspel:droplet>