Dies liegt daran, die input
wieder den Fokus angenommen wird, wenn die alert
geschlossen ist (die der neue Fokus ist, wenn es erscheint - beachten Sie die Kontur um die Schaltfläche im Dialog?)
Wenn Sie nur wollen, sobald die Warnung Show machen, Sie vielleicht etwas ein ähnelnden dieses schreiben konnte:
let hasShownAlert = false
$('input').focus(function() {
if (!hasShownAlert) {
hasShownAlert = true
alert('hello')
}
})
natürlich können Sie diese mit staatlichen Containern oder etwas verbessern könnte, aber dies ist die einfachste Art und Weise Sie es erreichen können. (Hinweis: Die hasShownAlert
Variable außerhalb des onfocus
Handler definiert werden, sonst wird es vom Garbage Collector gelöscht werden.)
Aktualisiert: Also, wenn Sie es nicht wollen, nur einmal zeigen Es gibt ein paar Dinge, die du tun könntest. Der erste, der einfachere, würde eher auf das Ereignis click
hören als auf den Fokus. Der zweite Weg könnte sein, eine didShowAlert
Variable zu setzen - den Wert jedes Mal invertieren, wenn der Handler ausgelöst wird. ZB ..
let didShowAlert = false
$('input').on('focus', (ev) => {
if (didShowAlert) {
didShowAlert = false
} else {
didShowAlert = true
alert('hello')
}
})
1. Steuer Fokus, alert Kicks erhält in, verliert die Kontrolle den Fokus. Warnung schließt die Kontrolle erhält den Fokus. Gehen Sie zurück zu 1. – Keith
Sie könnten versuchen, etwas wie meine Antwort unten, vorübergehend deaktivieren das Fokusereignis für das Element nach der Warnung, und aktivieren Sie es wieder ein paar Millisekunden später – Manav