2

I'm trying to make it so when the user clicks "Link" then it scrolls down to the input field "a" and toggles it without having to click. I'm already making use of jQuery so perhaps it should handle scrolling as well, however I'm unsure how to deal with toggling (perhaps focusing on is the right terminology) an input field automatically. Note: I omitted all other code for readability.

<a href="#view" class="button">Link</a>

<div id="view">
<input type="text" id="a" name="a">
</div>
isherwood
  • 58,414
  • 16
  • 114
  • 157
emily33
  • 25
  • 4
  • 1
    you can use `$( "#a" ).focus();` to focus on an input field, scrolling to element is covered here: https://stackoverflow.com/questions/6677035/scroll-to-an-element-with-jquery – Photon Nov 08 '21 at 18:40

2 Answers2

1

Not sure what you mean by 'toggle', but you can use focus to move the cursor (in)to the input field. Here's a snippet where the input field is out of sight. The handling is done using event delegation.

document.addEventListener(`click`, handle);

function handle(evt) {
  if (evt.target.id === `view`) {
    // if you click from a href element, you have to prevent
    // the default action of the click. May be advisable to
    // use a button here.
    evt.preventDefault();
    const inpVw = document.querySelector(`#a`);
    // focusing automatically scrolls to the field
    inpVw.focus();
    inpVw.setAttribute(`placeholder`, `Feel free to type`);
  }
}
#viewInput {
  margin-top: 120vh;
}
<a id="view" href="#">Link</a>

<p id="viewInput">
  <input type="text" id="a" name="a">
</p>
KooiInc
  • 119,216
  • 31
  • 141
  • 177
0

Add an empty anchor tag:

<div id="view">
<input type="text" id="a" name="a">
<a name="myawesomeanchour"></a>
</div>

then add the event handler to the 'Link' button:

var myawesometag = $("a[name='myawesomeanchour']");
$('html,body').animate({scrollTop:myawesometag.offset().top},'slow');
$('#a').toggle();

remove the toggle line if the toggle isn't still required.

sanepete
  • 979
  • 9
  • 28