Recently I’ve stepped away from the MonoRail world to work on a project that uses ASP.Net WebForms. It didn’t take long before I found an annoying problem. (Actually I found many annoying problems, but I’ll focus on one here.)
The <ASP:Panel> control has a DefaultButton
property which, according to the documentation, "Gets or sets the identifier for the default button that is contained in the Panel
control." In other words:
Use the DefaultButton property to indicate which button gets clicked when the Panel control has focus and the user presses the ENTER key.
It works perfectly, if you’re not using a LinkButton
control. Actually, that’s not true; if you use a LinkButton
control and Internet Explorer, it works fine. It just doesn’t work in Firefox. Why?
Dmytro Shteflyuk outlines why in his blog post, Using Panel.DefaultButton property with LinkButton control in ASP.Net. Apparently, it’s an issue with the JavaScript code that Microsoft generates, which expects a click()
method on the anchor (i.e. LinkButton
). Firefox doesn’t have such an event for anchors — at least, not by default.
Dmytro outlines a fix which requires you to injext some JavaScript for each button. I prefer a simpler approach using CSS selectors, so I wrote the following script (Prototype required) to do it. Simply add this script to your web page, add the CSS class "button" to each LinkButton control, and press ENTER on your Firefox forms.
function prepareLinkButtonClicks() { $$('a.button').each(function(tag) { if (tag && typeof(tag.click == 'undefined')) { tag.click = function() { var result = true; if (tag.onclick) result = tag.onclick(); if (typeof(result) == 'undefined' || result) { eval(tag.href); } } } }); } Event.observe(window, 'load', prepareLinkButtonClicks);
Tristan says:
Perfect!
Thanks so much for posting this – it’s just what I was looking for. NB, if you’re using Mootools instead of/as well as prototype, then change the last line to:
window.addEvent( ‘load’, prepareLinkButtonClicks );
fedrok says:
Hi!
Thanks!
But It’ doesn’t work with FF 3.5.8.
Instead It works good with Google Chrome!
What can I do with FF?
Thx