Братва, кто подскажет, как установить кнопку, работающую по нажатию ENTER на странице в браузере?
На начальном этапе, я ее устанавливаю на сервере при помощи св-ва HtmlForm.DefaultButton и вроде как работает, пока никакая кнопка не имеет фокуса.
Но при первом же щелчке по любому элементу страницы, получает фокус первая в дереве страницы кнопка и она же вызывается по ENTER.
Очевидно, существует фокус ввода (им может быть элемент Input), и одновременно фокус нажатия ENTER, который выделяется пунктирной рамкой на кнопке. Так вот как им (вторым) управлять, непонятно.
Здравствуйте, Mercury, Вы писали:
M>Братва, кто подскажет, как установить кнопку, работающую по нажатию ENTER на странице в браузере? M>На начальном этапе, я ее устанавливаю на сервере при помощи св-ва HtmlForm.DefaultButton и вроде как работает, пока никакая кнопка не имеет фокуса. M>Но при первом же щелчке по любому элементу страницы, получает фокус первая в дереве страницы кнопка и она же вызывается по ENTER. M>Очевидно, существует фокус ввода (им может быть элемент Input), и одновременно фокус нажатия ENTER, который выделяется пунктирной рамкой на кнопке. Так вот как им (вторым) управлять, непонятно.
Здравствуйте, pr0ff, Вы писали:
P>Здравствуйте, Mercury, Вы писали:
M>>Братва, кто подскажет, как установить кнопку, работающую по нажатию ENTER на странице в браузере? M>>На начальном этапе, я ее устанавливаю на сервере при помощи св-ва HtmlForm.DefaultButton и вроде как работает, пока никакая кнопка не имеет фокуса. M>>Но при первом же щелчке по любому элементу страницы, получает фокус первая в дереве страницы кнопка и она же вызывается по ENTER. M>>Очевидно, существует фокус ввода (им может быть элемент Input), и одновременно фокус нажатия ENTER, который выделяется пунктирной рамкой на кнопке. Так вот как им (вторым) управлять, непонятно.
P>А если установить у Panel.DefaultButton?
Пробовал.
Похоже, все таки это работает, только когда фокусная кнопка на странице не определена. Но в том-то и дело, что при любом клике сразу получает реальный фокус не нужная кнопка. А когда есть реальный фокус, кнопка по умолчанию уже — по барабану. Т.е. проблема: как установить фокус на нужную кнопку и чтобы он не менялся при кликах.
Здравствуйте, 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 не работает, пришлось из нее лишнее выкинуть и сделать свою.