#12534 closed defect (fixed)
Dialog: reopen fails when the show action is connected to an unfocusable node
Reported by: | limepix | Owned by: | bill |
---|---|---|---|
Priority: | high | Milestone: | 1.7 |
Component: | Dijit | Version: | 1.6.0 |
Keywords: | dijit Dialog DialogLevelManager getFocus | Cc: | |
Blocked By: | Blocking: |
Description
I´ve encoutered a problem with dijit.Dialog. It seems, that the DialogLevelManager? has a problem with setting a correct focus when a Dialog has an focusable input field in its content and is opened via an onclick handler from a UNFOCUSABLE node (i.e. an image). The error occurs when the Dialog is opened for the second time via the image. The error message that i see in Firebug is:
exception in animation handler for: beforeBegin
[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLInputElement.selectionStart]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://172.16.1.50:8080/teamportal/js/dojo-release-1.6.0-src/dojo/_base/_loader/bootstrap.js :: anonymous :: line 511" data: no] http://172.16.1.50:8080/teamportal/js/dojo-release-1.6.0-src/dojo/./_base/fx.js Line 154
The problem can be reproduced on my attached testpage. If you open the Dialog from the button, close it and reopen it via the button, everything works fine!
But if you remove the focus from the button, open the dialog via the image, close it and then try to reopen it via the image, it crashes.
The exact place where i can see it crash is:
/dijit/Dialog.js on line 484: 483 Save current focus 484 ds[ds.length-1].focus = dijit.getFocus(dialog);
My environment is: Firefox 3.6.15 Firebug 1.6.2 Dojo 1.6
Hope this helps and will be fixed soon!
Attachments (1)
Change History (6)
Changed 9 years ago by
Attachment: | testcase.gsp added |
---|
comment:1 Changed 9 years ago by
Milestone: | 1.6.1 → 1.7 |
---|---|
Summary: | Reopen dijit.Dialog fails, when the show action is connected to an image in Firefox → Dialog: reopen fails when the show action is connected to an unfocusable node |
comment:2 Changed 9 years ago by
[PATCH][CLA]
I fixed this in the DestroyRecursive? of the Dialog. But I guess it should be in the destroy of _Widget;
destroyRecursive: function () { //Remove my focus of my soon to be destroyed nodes if any //Keep this fix till Ticket #12534 is fixed if (dojo.isDescendant(dijit._curFocus, this.domNode)) dijit._curFocus = null; if (dojo.isDescendant(dijit._prevFocus, this.domNode)) dijit._prevFocus = null; this.inherited(arguments); }
comment:3 Changed 9 years ago by
Owner: | set to bill |
---|---|
Status: | new → assigned |
Ah OK thanks for the patch, yes I agree that _curFocus etc. has to be cleared before a node is destroyed, so the code above should run whenever a widget's DOM is destroyed (i.e. whenever a widget is destroyed, unless the preserveDom argument is set to true).
I think I want to achieve that by making dijit/focus monitor calls to dojo.destroy() and clear those variables.
It may not be quite sufficient because older versions of IE get cranky when you destroy the node with focus, I remember lots of issues with InlineEditBox but unfortunately don't remember the details.
comment:4 Changed 9 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
testcase