Actions
Defect #1636
closedUse of Prototype's Element-methods (like this.up("form"))
Start date:
2008-07-14
Due date:
% Done:
0%
Estimated time:
Resolution:
Fixed
Affected version:
Description
In /views/issues/_list.rhtml for example you use "this.up('form')". Actually the up-method is not available on the element itself, but only by the element, when it is returned by the $() method.
Quote from the Prototype-Documentation:
Prototype adds many convenience methods to elements returned by the $() function.
So, the correct way would be using: $(this).up('form') or Element.up(this,'form')
In IE7 the up method is actually not available on "this". In your case it's working "accidentially", because there is a call to $$('.hascontextmenu') executed somewhere in context_menu.js during page load, and by that the up-method is added to all DOM elements.
To better understand the problem check out this example (make sure to set the correct path and filename to prototype.js)
<html> <head> <script src="prototype-1.5.js"></script> </head> <body> <form id='theform'> <a id='thea' onclick='alert($(this).up("form").id); return false;' href='#'>CLICK HERE</a> </form> <script type='text/javascript'> // the following call to $$() is what essentially makes it work in Redmine (called from context_menu.js via unselectAll): $$('.hascontextmenu'); // COMMENT THIS LINE AND CLICK THE 'CLICK HERE' LINK TO SEE THE 'BUG' (in IE7) </script> </body> </html>
Regards,
Chris
Actions