Re[3]: Установка кнопки по умолчанию
От: Mercury  
Дата: 27.10.07 13:16
Оценка:
Здравствуйте, Mercury, Вы писали:

M>Здравствуйте, pr0ff, Вы писали:


P>>Здравствуйте, Mercury, Вы писали:


M>>>Братва, кто подскажет, как установить кнопку, работающую по нажатию ENTER на странице в браузере?

M>>>На начальном этапе, я ее устанавливаю на сервере при помощи св-ва HtmlForm.DefaultButton и вроде как работает, пока никакая кнопка не имеет фокуса.
M>>>Но при первом же щелчке по любому элементу страницы, получает фокус первая в дереве страницы кнопка и она же вызывается по ENTER.
M>>>Очевидно, существует фокус ввода (им может быть элемент Input), и одновременно фокус нажатия ENTER, который выделяется пунктирной рамкой на кнопке. Так вот как им (вторым) управлять, непонятно.

P>>А если установить у Panel.DefaultButton?


M>Пробовал.

M>Похоже, все таки это работает, только когда фокусная кнопка на странице не определена. Но в том-то и дело, что при любом клике сразу получает реальный фокус не нужная кнопка. А когда есть реальный фокус, кнопка по умолчанию уже — по барабану. Т.е. проблема: как установить фокус на нужную кнопку и чтобы он не менялся при кликах.

Не смог оставить фокус ввода символов на текстбоксе, а фокус нажатий ENTER установить на определенную кнопку, как это хитро делает IE.
Но решение есть:
Page.Form.Attributes.Add("onclick",
"document.forms[0].onkeypress = new Function(\"return WebForm_FireDefaultButtonMy(event, '"
+ cmdSave.UniqueID + "');\");");
const String sScriptKey = "SetDefButton";
if (!Page.ClientScript.IsClientScriptBlockRegistered(sScriptKey))
{
String sss = "";
sss += "function WebForm_FireDefaultButtonMy(event, target) {";
sss += "if (event.keyCode != 13) return true;";
sss += "var defaultButton;";
sss += "if (__nonMSDOMBrowser) defaultButton = document.getElementById(target);";
sss += "else defaultButton = document.all[target];";
sss += "if (!defaultButton || typeof(defaultButton.click) == \"undefined\") return true;";
sss += "defaultButton.click();";
sss += "event.cancelBubble = true;";
sss += "if (event.stopPropagation) event.stopPropagation();";
sss += "return false;}";
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), sScriptKey, sss, true);
}
Причем, встроенная ф-ция WebForm_FireDefaultButton не работает, пришлось из нее лишнее выкинуть и сделать свою.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.