t34: Once again, MaximGB comes up huge. He had some ideas on a great starting point for making tabbing work with the BrowseButton. I have incorporated, moddified (slightly), and tested his suggestions. Go ahead and test if out on the demo page: http://loeppky.com/steven/code/samples/BrowseButton/.
Notes: you may have to clear your cache to pick up the newest version of BrowseButton.js. Also, as stated in the original post, reverse-tabbing (shift+tab) doesn't work once one has tabbed to the BrowseButon. One has to tab twice to get past the BrowseButton.
jsakalos: I don't know what the root issue is, but I assume it's a browser or Ext thing. When I create the input file element in the createInputFile method, you'll notice that the line right after is this.inputFileEl = this.inputFileEl.child('input') || this.inputFileEl. This is done because the create method sometimes returns <em><input type="file/></em> verses <input type="file/>. Again, I don't know why this is, but the detachInputFile method should just return the input file, not the input file wrapped in em tags. Is that what you're seeing? Is your concern then just the left over em tags?
Yeah, detachInputFile always returns <input></input>. The root of the issue is that I want to get rid of those unnecessary <em></em> that would lead to memory leak in the long run. (Tiny leak, but why not to cleanup if we know about it).