Reputation: 9080
I have the following code snippet:
<div id="listbox1div" style="z-index:95; background:white; overflow-y:auto; overflow-x:hidden; width:240; height:314px;">
<a id="focusLink2"></a>
<table id="ptObj_listbox1...
I have a page that is building <div>
elements dynamically (such as above). This <div>
displays data on top of the main screen. When the page generates the divs I would like to set focus. I can not put an onLoad function on the body tag as I don't know when the divs will be generated.
A <div>
tag can not have focus set on it directly. So I put an empty <a>
tag with an id that I'm calling in the following function:
function setTableFocus(count){
var flinkText = 'focusLink'+count;
document.getElementById(flinkText).focus();
}
I'm not getting any errors and I know the function is being called when the page is presented (via alerts). However, when I using the arrow keys or enter button the entire page moves (not even the div that is presenting the data).
When I click on to one of the table elements (using the mouse). After that the keydown event starts working. What I would like this to do is to present the data to the user and automatically be keyboard driven.
Does anyone have any suggestions how I can accomplish this?
Upvotes: 48
Views: 70692
Reputation: 4980
I solve that doing the next:
<div tabindex="0" >
<button onclick="element.parentNode.focus();"/>
</div>
Upvotes: 1
Reputation: 6605
you can make a div
focusable if you add a tabindex
attribute.
see: http://snook.ca/archives/accessibility_and_usability/elements_focusable_with_tabindex
The tabindex value can allow for some interesting behaviour.
- If given a value of "-1", the element can't be tabbed to but focus can be given to the element programmatically (using element.focus()).
- If given a value of 0, the element can be focused via the keyboard and falls into the tabbing flow of the document.
- Values greater than 0 create a priority level with 1 being the most important.
UPDATE: added a simple demo at http://jsfiddle.net/roberkules/sXj9m/
Upvotes: 105
Reputation: 1267
do you mean you want to focus the divs whenever it is generated? try reasearching for these
and
and for the keypress..
http://api.jquery.com/keypress/
afaik divs and other elements can have focus of some sort like in wikis, like..
http://en.wikipedia.org/wiki/JavaScript#Cross-site_vulnerabilities
and it'll scroll automatically there. I am just no sure how.
as for the dynamically generated divs and tables you can use jquery's live() function
Upvotes: 0
Reputation: 1795
The function that's dynamically generating the divs will have the context available to know which div to focus on, after the last div output a script with a scrollTo() to focus on the div you want. Assign each div an ID, so you'll be able to choose it out of the set.
Response.Write "
<script language='text/javascript'>
document.getElementById('div#').scrollIntoView();
</script>
"
Upvotes: 2
Reputation: 82614
You could use getElementsByClassName
<div tabindex="0" class="to-focus">TEXT</div>
<script> document.getElementsByClassName('to-focus')[0].focus()</script>
Upvotes: 0
Reputation: 76218
Are you in control of the asp function? If yes, then that'd be the easiest place to set focus. Otherwise, you could listen to DOMNodeInserted
event (note: browser support may vary) and set focus to div
(or its children) based on appropriate conditions.
Upvotes: 0
Reputation: 26753
You can't focus a div. Do you mean focus an input?
Anyway, you can include a short script tag to focus something right in the HTML - simply put the script right after the div - or even inside the div.
Upvotes: -2