2017-09-16 3 views
1

Ich möchte ein Alert Pop-up bei der Fokussierung auf die Eingabe. Es erscheint korrekt, aber wenn ich auf 'OK' oder 'x' drücke, also abbrechen, wird der Loop endlos und schließt nie.alert() Funktion ist Looping, wenn im Fokus aufgerufen() Ereignis

$('input').focus(function() { 
     alert('hello'); 
}); 
+2

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

+0

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

Antwort

1

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') 
    } 
}) 
+0

Dies würde nur einmal funktionieren :( – Manav

+0

@Manav aktualisiert es –

0

Sie könnten einen Hack versuchen, wie

$(document).on("focus", 'input:not(.unFocus)', function() { 
     alert('hello'); 
     $('input').addClass('unFocus'); 
     setTimeout(function() { 
      $('input').removeClass('unFocus'); 
     }, 10); 
}); 

Es ist nicht der ideale Weg, es zu tun, aber es funktioniert :)

Verwandte Themen