2013-02-11 14 views
5

Mam system przesyłania plików, po kliknięciu przycisku przesyłania plik jest następnie przesyłany przez AJAX. Podczas przesyłania pliku chcę wyłączyć funkcję kliknięcia znajdującą się na przycisku "Wybierz obrazy". Obecnie jest to funkcja kliknięcie na przycisk plików wybór:Wyłącz, a następnie włącz ponownie funkcję kliknięcia jQuery

$(document).ready(function() { 
    $("#file-button").click(function() { 
     $('#file').trigger('click'); 
    }); 
}); 

który działa dobrze, ale chcę, aby wyłączyć funkcję kliknięcia w fazie postępów XMLHttpRequest, a następnie ponownie włączyć funkcję kliknij, gdy Otrzymuję odpowiedź 200 z serwera. Próbowałem już bind() i unbind() i działa dobrze w Chrome, ale w firefox, podczas przesyłania, przycisku nie można kliknąć, to jest to, czego chcę, a potem po otrzymaniu odpowiedzi z serwera przycisk jest ponownie włączony, ale w firefox otwierane są jednocześnie dwa okna dialogowe wyboru plików. Dzieje się tak z powodu powyższej funkcji i ponownego powiązania funkcji za pomocą bind(). Czy ktoś ma jakieś sugestie, jak włączyć, a następnie wyłączyć przycisk bez ponownego wpisywania kodu (funkcji) zdarzenia kliknięcia.

Coś takiego byłoby lepiej:

$('#file-button').disable(); 
$('#file-button').enable(); 

Próbowałem on() i off() i nie wydaje się do pracy albo.

Odpowiedz

7

ROZWIĄZANIE - dzięki Eric

zmieniłem pierwotną funkcję kliknij na następujący:

$(document).ready(function() { 
    $("#file-button").click(function() { 
     if ($('#file-button').attr('disabled') == "disabled") { 
     return false; 
     } 
     else { 
      $('#file').trigger('click'); 
     } 
    }); 
}); 

I ustawić następujące czynności, aby wyłączyć przycisk

$('#file-button').attr('disabled','disabled'); 

A to, aby ponownie włączyć:

$('#file-button').removeAttr('disabled'); 
+1

Użyłem tego również, ale stwierdziłem, że' else' jest niepotrzebne/zbędne. –

+1

Musiałem wywołać zdarzenie kliknięcia na '# file' po kliknięciu przycisku' # file-button'. Tak więc instrukcja else była konieczna. – ramo

+0

To już nie działa, zapoznaj się z tym linkiem: http://stackoverflow.com/questions/15122526/disable-button-in-jquery –

0

Wypróbuj Attr Funkcja jQuery.

$('#file-button').attr('disabled','disabled'); 
$('#file-button').removeAttr('disabled');

Testowany kod

<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript"> 

    $(document).ready(function() 
    { 
     $("#file-button").click(function(e) 
     { 
      e.preventDefault(); 
      $(this).attr('disabled','disabled'); 
      return false; 
     }); 
    }); 

</script> 

<input type="button" id="file-button" value="ClickMe" /> 
+0

To nie działa. Funkcja kliknięcia, którą mam w moim kodzie JavaScript, przesłania wyłączony atrybut, ponieważ nasłuchuje funkcji kliknięcia. – ramo

+0

spójrz na zaktualizowaną odpowiedź. –

+0

Zaktualizowana odpowiedź również nie działa. [codepen] (http://codepen.io/anon/pen/onIFp) – ramo

0

Trzeba zwrócić przycisk wejściowego w celu przycisk wyłączenia,

Coś poniżej

$("input[type=submit]").prob('disabled', true); 
    $("inpur[type=submit]").prob('disabled', false); 
+0

To nie działa. Funkcja kliknięcia, którą mam w moim kodzie JavaScript, przesłania wyłączony atrybut, ponieważ nasłuchuje funkcji kliknięcia. A przy okazji, nie jest to przycisk przesyłania, jest to przycisk wyboru pliku, który znajduje się w znaczniku '

+1

czy próbowałeś z prob ......? – EnterJQ

+0

Przepraszam, czy spróbowałem z czym? – ramo

3

Wyłącz przycisk za pomocą jQuery $.prop() funkcja:

$("input[type=submit]").prop('disabled', true); 

Dodaj warunkowa do obsługi kliknij, aby sprawdzić, czy przycisk jest wyłączony:

$("#file-button").click(function() { 
    if (!$(this).is(':disabled')) { 
    $('#file').trigger('click'); 
    } 
}); 

Później ponownie włączyć przycisk:

$("input[type=submit]").prop('disabled', false); 

Albo może być w stanie wykorzystać zdarzenie submit zamiast kliknięcia, jeśli istnieje formularz:

$("#whatever-your-form-is").on('submit', function() { 
    $('#file').trigger('click'); 
}); 
+0

Myślę, że masz błąd logiczny w tym wierszu 'if ($ (this) .is (': disabled')) {' jak to sprawdzić, aby upewnić się, że wyłączono to ustawione na false, nie jest prawdziwe. – ramo

+0

Masz rację. Edytowane, aby to naprawić. Po prostu dodaj '!': 'If (! $ (This) .is (': disabled'))' –

+0

Naprawiłem to nieco zmieniając twój kod, spójrz na rozwiązanie w moim pytaniu. Dzięki za pomysł Eric! – ramo

Powiązane problemy