Вход Bootbox потерял фокус на клавише Alt
В настоящее время я пытаюсь сделать страницу настроек пользователя. На этой странице пользователь может изменить свой адрес электронной почты, нажав кнопку, которая открывает всплывающее окно. В этом всплывающем окне он должен набрать свой новый адрес электронной почты. Проблема в том, что когда я нажимаю клавишу Alt, я теряю фокус ввода. Итак... Я не могу набрать любой адрес электронной почты, потому что я не могу добавить "@" (Да, я француз и у меня есть клавиатура AZERTY:/).
Мой вопрос: что я могу сделать, чтобы не потерять фокус?
Я разрабатываю свое веб-приложение в Meteor и Jade. Вот мой шаблон всплывающего окна:
template(name="change_mail")
table.table.table-responsive.large-table
tbody
tr
td {{_ "current_mail" }} :
td.table-text#old-mail
tr
td {{_ "new_mail" }} :
td
input.black#new-mail(type="text" name="mail")
И мой контроллер:
Template.change_mail.rendered = function ()
{
document.getElementById('new-mail').focus(); // Don't work
}
"click #change_mail": function (event, template)
{
event.preventDefault();
var user = Meteor.user();
bootbox.dialog(
{
title : t('change_mail'),
message : "<div id='dialogNode'></div>",
className : "info-popup",
buttons :
{
cancel :
{
label : t('back'),
className : "btn-default btn-lg"
},
success :
{
label : t('update'),
className : "btn-info btn-lg",
callback : function ()
{
var mail = $("#new-mail").val();
if (mail === "")
{
return;
}
else
{
Meteor.call('updateMail', user._id, mail);
displayPopup(t("success"), t("success_change_mail"), t("ok"), "btn-success btn-lg", "success-popup");
}
}
}
}
});
Blaze.render(Template.change_mail, $("#dialogNode")[0]);
$("#old-mail").text(user.emails[0].address);
},
РЕДАКТИРОВАТЬ: Я пытался изменить библиотеку, используя Magnific Popup. Я получаю фокус, когда всплывающее окно открыто, но я сразу потерял его. Во всяком случае, я потерял фокус на обоих, когда я нажимаю клавишу Alt. Я не понимаю почему.
2 ответа
Это потому, что вы используете Ubuntu. В Ubuntu ключ alt - это системный ключ, который связан с командой "введите команду".
Ссылка: https://github.com/Guake/guake/issues/352
Так что, если ваши клиенты не используют клавиатуру Ubuntu + Azerty, это нормально.
Как грязное исправление, вы можете поймать событие, когда клавиша нажата, и если эта клавиша alt, просто наведите фокус с помощью
document.getElementById('email').focus();
Попробуйте использовать функцию JS DOM focus().
Может сработать, если фокус установлен только на текстовое поле в вашем всплывающем окне.
например:
document.getElementById('email').focus();