(In Fortsetzung der this answer) Geben SieUserscript für ein Bestätigungsfenster zu schaffen, wenn durch Drücken von Strg + Enter oder in der Titel Textbox einer neuen Ausgabe Seite in GitHub
Ich habe ein Skript zu machen versucht (mit Greasemonkey), die einen Bestätigungs-Popup zeigen würde, wenn ich versuche:
- eine neue Ausgabe einreichen oder
- hinterlässt einen Kommentar.
über drücken Strg + Enter:
wenn Benutzer Ok
im Popup drücken, dann das Skript zu ermöglichen, die einreichen,
aber wenn der Benutzer Cancel
im Popup drückt, dann das Skript das stoppen einreichen.
Das Skript in der obigen Antwort funktioniert in diesen Fällen ordnungsgemäß.
Ich habe bemerkt, dass es eine zusätzliche Möglichkeit gibt, ein Problem zu unterbreiten:
drücken Geben Sie oder Strg + Geben Sie während Fokus auf die Titel Textbox Problem haben.
Ich möchte dies auch mit dem Skript abdecken.
Unten ist mein Code.
Wenn ich nur die neue Problemseite (https://github.com/darkred/test/issues/new) in einem neuen Tab öffnen _ (d. H. Nicht über einzelne Seite Anwendung Workflow, auch bekannt als die History API) _), dann das Skript auch funktioniert, wenn drücken Strg + Geben Sie.
Das Problem, das ich immer noch haben, dass , wenn ich auf die neue Ausgabe Seite navigieren über Anschluss an die New issue
Taste (dh über die Geschichte API),
und dann entweder ich drücken Strg + Enter oder einfach Geben Sie in den Titel Textfeld, dann erscheint das Popup vorübergehend, aber das Senden ist nicht blockiert.
(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:
- offen https://github.com/darkred/test/issues,
- klicken Sie auf die Schaltfläche
New Issue
(Sie über die Geschichte API https://github.com/darkred/test/issues/new weitergeleitet werden, - (Sie werden den Fokus bemerken jetzt ist in der Ausgabe Titel Textfeld)
Typ 123 als Problem Titel und behalten Sie den Fokus auf das Problem Titel Textfeld (lassen Sie die ist sue Körper leer), - drücken Strg + Enter (oder nur Enter),
- Mitteilung nun, dass das Bestätigungsfenster für einen Moment erscheint,
aber die vorlegen wird nicht blockiert werden.
Was ist falsch an meinem Skript?
Als Referenz ist hier eine Liste der Tastaturkürzel Liste der GitHub: screenshot,
wird, wenn Sie erscheint drücken? in der neuen Ausgabeseite.
Versuchen vor dem 'confirm' zu verhindern, und wenn okay'd , rufen Sie das Formular 'submit()' direkt auf oder verwenden Sie 'dispatchEvent'. – wOxxOm
@wOxxOm: Danke, dass du versucht hast zu helfen. Also habe ich versucht, vor dem 'confirm' zu verhindern, aber leider, wenn ich' manageKeyEvents (zEvent) 'in jetzt 'if (zEvent.ctrlKey && zEvent.keyCode === 13) {zEvent.stopPropagation(); zEvent.preventDefault(); 'und dann' if (confirm === ..) 'dann stoppt es das Senden nicht. – darkred
Ja, verhindert die Arbeit für das aktuelle Ereignis, also müssen Sie einen "senden" Listener hinzufügen. – wOxxOm