In my case, and in case someone else runs into this, I load a form for view, user clicks "Edit" and ajax gets & returns values and updates the form.
Just after this, I tried all of these and none worked except:
setTimeout(function() { $('input[name="q"]').focus() }, 3000);
which I had to change to (due to ajax):
setTimeout(function() { $('input[name="q"]').focus() }, **500**);
and I finally just used $("#q") even though it was an input:
setTimeout(function () { $("#q").focus() }, 500);