2017-06-13 8 views
9

Utworzono dyrektywę do pracy z plikami. Kiedy zmienić plik lub wybierz nowy nazywam ten kod:Zmień wydarzenie wywołane podczas zmiany wartości elementu IE 11/Angular

element.val('');

Robię to, aby móc usunąć wybrany plik i wybrać taki sam po tym. Jeśli tego nie zrobię, po usunięciu zaznaczonego pliku i ponownym wybraniu go ponownie, zdarzenie change nie zostanie wywołane i nie będę mógł zrobić tego, co muszę.

Po prostu muszę wiedzieć, czy istnieje sposób uniknięcia IE wywoływania zdarzenia zmiany, gdy zmieniam wartość danych wejściowych.

Szukałem trochę i znalazłem komentarze tak:

The onchange event on textboxes and textarea elements only fires when the element loses focus, and if its value is now other than its value when it got focus.

Tak, to wydarzenie zmiana nie miała być nazywane po prostu zmienić wartość de programowo.

Wszelkie pomysły?

EDIT:

Utworzyłem jsfiddle z behaviour

Odpowiedz

6

Wydaje się, że element.val('') emitować nowe change zdarzenie powodujące wielokrotne połączenia do słuchacza. Mimo to można uniknąć tego dziwnego zachowania, sprawdzając wartość wejściową, tak jak poniżej:

element.bind('change', function(){ 
    if(!element.val()) { 
     return; 
    } 
    element.val(''); 
    // code goes here 
}); 
+2

Proponuję użyć ['na'] (http://api.jquery.com/on/) zamiast "bind". – Renan

+0

element.bind jest przestarzałe, zamiast tego to użycie on(). – fernandoocf

Powiązane problemy