Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Javascript > Table stops receiving kbd input in mozilla

Reply
Thread Tools

Table stops receiving kbd input in mozilla

 
 
Jure Erznoznik
Guest
Posts: n/a
 
      05-24-2005
I made a table that shows 20 rows of a table at a time.
When the user presses down or up arrow, the table will scroll as necessary
filling new rows.

But I have a problem with the following code snippet:
while (tr.sectionRowIndex < this.scrollRowsVisible && this._DBCacheS >
0)
{ //Scroll Up
// this.tBody.removeChild(this._DBRowCache[this._DBCacheE].element);
this.tBody.deleteRow(-1);
this._DBCacheS--;
this._DBCacheE--;
this.tBody.insertBefore(this._DBRowCache[this._DBCacheS].element,
this._DBRowCache[this._DBCacheS + 1].element);
}
while (tr.sectionRowIndex > (this.tBody.rows.length -
this.scrollRowsVisible) && this._DBCacheE < this._DBRowCache.length - 1)
{ //Scroll down
// this.tBody.removeChild(this._DBRowCache[this._DBCacheS].element);
this.tBody.deleteRow(0);
this._DBCacheS++;
this._DBCacheE++;
this.tBody.appendChild(this._DBRowCache[this._DBCacheE].element);
}

tr = currently selected row
this.scrollRowsVisible = # rows to have visible from currently selected row
to table "edge". This means that when scrolling down, there will always be 4
additional rows displayed below the current one.
this._DBCacheS, this._DBCacheE - indexes to first and last visible element
in cache. All elements between these values are shown in table
this._DBRowCache.length - # elements in cache

CSS:
..mytable {
font: Icon;
border: 1px Solid ThreeDShadow;
color: rgb(255,255,255);
margin-left: auto;
margin-right: auto;
text-align: left;
-moz-user-select: none;
-moz-user-focus: normal;
-moz-user-input: enabled;
}

This snippet works like a charm in IE, but in Mozilla / Firefox, it will
always stop receiving kbd input after #rows_in_table -
this.scrollRowsVisible + 1 consecutive movements.
This is the only code that checks for this.scrollRowsVisible and the number
of successful movements is directly related to this variable. It does not
matter how many times the loops execute eg. I can start presing down arrow
at the top of the table and it will stop after 16 presses (just after it
scrolls for the first time). Alternatively I can use the mouse to select one
of the bottom rows and then continue moving down with kbd only to stop after
scrolling 16 times.
To restore kbd input, I have to click on the table with the mouse. There is
no "special" code in that event that would help me "unlock". Tried every
possible variation. But I did discover that removing this.tBody.deleteRow
stops this behaviour.

Does anybody have any idea why this is happening? Any help would be greatly
appreciated.

Jure


 
Reply With Quote
 
 
 
 
Jure Erznoznik
Guest
Posts: n/a
 
      05-24-2005
Stupid me! Found out why:
The table stops receiving kbd input the moment I remove the row I clicked.
Obviously this row had the kbd input focus.

The question now would be: Does anybody know how to set focus to a table row
or table cell? focus() is not a method of those objects.

Thanks,
Jure


 
Reply With Quote
 
 
 
 
Jure Erznoznik
Guest
Posts: n/a
 
      05-26-2005
Just for the reference:
..mytable tr {
-moz-user-focus: ignore;
}
This solves the problem. If the row can't receive focus, then it leaves only
the whole table / tbody to receive it. Therefore deleting the row will not
result in lost focus.

"Jure Erznoznik" <(E-Mail Removed)> wrote in message
news:IeBke.12259$(E-Mail Removed)...
>I made a table that shows 20 rows of a table at a time.
> When the user presses down or up arrow, the table will scroll as necessary
> filling new rows.
>
> But I have a problem with the following code snippet:
> while (tr.sectionRowIndex < this.scrollRowsVisible && this._DBCacheS >
> 0)
> { //Scroll Up
> // this.tBody.removeChild(this._DBRowCache[this._DBCacheE].element);
> this.tBody.deleteRow(-1);
> this._DBCacheS--;
> this._DBCacheE--;
> this.tBody.insertBefore(this._DBRowCache[this._DBCacheS].element,
> this._DBRowCache[this._DBCacheS + 1].element);
> }
> while (tr.sectionRowIndex > (this.tBody.rows.length -
> this.scrollRowsVisible) && this._DBCacheE < this._DBRowCache.length - 1)
> { //Scroll down
> // this.tBody.removeChild(this._DBRowCache[this._DBCacheS].element);
> this.tBody.deleteRow(0);
> this._DBCacheS++;
> this._DBCacheE++;
> this.tBody.appendChild(this._DBRowCache[this._DBCacheE].element);
> }
>
> tr = currently selected row
> this.scrollRowsVisible = # rows to have visible from currently selected
> row to table "edge". This means that when scrolling down, there will
> always be 4 additional rows displayed below the current one.
> this._DBCacheS, this._DBCacheE - indexes to first and last visible element
> in cache. All elements between these values are shown in table
> this._DBRowCache.length - # elements in cache
>
> CSS:
> .mytable {
> font: Icon;
> border: 1px Solid ThreeDShadow;
> color: rgb(255,255,255);
> margin-left: auto;
> margin-right: auto;
> text-align: left;
> -moz-user-select: none;
> -moz-user-focus: normal;
> -moz-user-input: enabled;
> }
>
> This snippet works like a charm in IE, but in Mozilla / Firefox, it will
> always stop receiving kbd input after #rows_in_table -
> this.scrollRowsVisible + 1 consecutive movements.
> This is the only code that checks for this.scrollRowsVisible and the
> number of successful movements is directly related to this variable. It
> does not matter how many times the loops execute eg. I can start presing
> down arrow at the top of the table and it will stop after 16 presses (just
> after it scrolls for the first time). Alternatively I can use the mouse to
> select one of the bottom rows and then continue moving down with kbd only
> to stop after scrolling 16 times.
> To restore kbd input, I have to click on the table with the mouse. There
> is no "special" code in that event that would help me "unlock". Tried
> every possible variation. But I did discover that removing
> this.tBody.deleteRow stops this behaviour.
>
> Does anybody have any idea why this is happening? Any help would be
> greatly appreciated.
>
> Jure
>
>



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
kbd only works in repeat! Rick Merrill Computer Support 2 08-08-2006 11:19 PM
Kbd lights flash after shutdown-? Dean Computer Support 1 01-30-2005 02:29 PM
kbd handler J. J. Cale Javascript 6 10-28-2004 09:07 PM
Mozilla resize my table on input mouseover.... reinier Javascript 2 05-06-2004 05:50 PM
kbd proib. Atma Templeton Computer Support 0 08-01-2003 11:21 AM



Advertisments