(В продолжении this answer)Userscript для создания всплывающего окна подтверждения всякий раз, нажав Ctrl + Enter или Enter в заголовке текстового поля новой страницы выпуска в GitHub
Я пытался сделать скрипт (используя Greasemonkey), который будет показывать всплывающее окно подтверждения всякий раз, когда я пытаюсь:
- представить новый выпуск, или
- добавить новый комментарий.
с помощью нажатия Ctrl + Enter:
, если пользователь нажимает Ok
во всплывающем окне, то сценарий, чтобы позволить представить
но если пользователь нажимает Cancel
во всплывающем окне, то сценарий, чтобы остановить Отправить.
Скрипт в ответе выше работает нормально в этих случаях.
Я заметил, что есть дополнительный способ представить вопрос:
нажмите Enter или Ctrl + Enter, имея фокус на вопрос в заголовке текстового поля.
Я хотел бы также учесть это сценарием.
Ниже приведен мой код.
, если я просто открыть новую страницу выпуска (https://github.com/darkred/test/issues/new) в новой вкладке _ (то есть. Не с помощью рабочего процесса приложения одной страницы, ака History API) _), то скрипт работает при нажатии Ctrl + Enter.
Проблема, которую я до сих пор является то, что если я перейти на новую страницу выдачи через после New issue
кнопку (т.е. через History API),
, а затем я либо нажмите Ctrl + Enter или просто Введите в текстовое поле заголовка, , после чего всплывающее окно появится кратковременно, но подача не заблокирована.
(function() {
function init() {
var targArea = document.querySelector('#issue_title'); // New issue title
function manageKeyEvents(zEvent) {
if (zEvent.ctrlKey && zEvent.keyCode === 13) { // and the focused element is the issue title textbox
if (confirm('Are you sure?') === false) {
zEvent.stopPropagation();
zEvent.preventDefault();
// } else {
// var btn = document.querySelector('.btn-primary'); // 'Submit new issue' button
// btn.click();
}
}
}
if (targArea !== null) {targArea.addEventListener('keydown', manageKeyEvents);}
}
init();
document.addEventListener('pjax:end', init); // for the History API
})();
STR:
- открыт https://github.com/darkred/test/issues,
- нажмите кнопку
New Issue
(вы получите перенаправлены через History API к https://github.com/darkred/test/issues/new, - (Вы заметите фокус прямо сейчас находится в текстовом поле заголовка вопроса)
тип 123 как заголовок темы и держать фокус на текстовом поле заголовка проблемы (оставьте Sue тело пусто), - нажмите Ctrl + Enter (или просто Enter)
- Теперь обратите внимание, что всплывающее окно подтверждения появится на мгновение,
, но представить не будет заблокирован.
Что случилось с моим скриптом?
Для справки здесь приведен список список Сочетания клавиш в GitHub в: screenshot,
, который появляется при нажатии? в новой странице вопросов.
Попробуйте предупреждения перед 'confirm', и если okay'd , 'submit()' непосредственно в форме вызова или использовать 'dispatchEvent'. – wOxxOm
@wOxxOm: Спасибо, что постарались помочь. Итак, я попытался предотвратить до 'confirm', но, к сожалению, если я изменил' manageKeyEvents (zEvent) 'на наличие теперь' if (zEvent.ctrlKey && zEvent.keyCode === 13) {zEvent.stopPropagation(); zEvent.preventDefault(); ', а затем' if (confirm === ..) ', то это не останавливает отправку. – darkred
Да, предотвращение работ для текущего события, поэтому вам нужно добавить слушателя «submit». – wOxxOm