2013-02-11 25 views
5

Ich habe ein Datei-Upload-System, nach dem Hochladen der Schaltfläche geklickt wird, wird die Datei dann über AJAX hochgeladen. Während die Datei hochgeladen wird, möchte ich die Klickfunktion deaktivieren, die sich auf der Schaltfläche "Bilder auswählen" befindet. Derzeit ist dies die Klick-Funktion auf der Datei-Auswahltaste:Deaktivieren und dann wieder aktivieren klicken Sie auf Funktion jQuery

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

Das funktioniert gut, aber ich möchte die Klick-Funktion in der Fortschritt Phase des XmlHttpRequest deaktivieren und dann die Klick-Funktion wieder aktivieren, wenn Ich bekomme eine 200 Antwort vom Server. Ich habe versucht bind() und unbind() und es funktioniert gut in Chrome, aber in Firefox, während des Uploads, kann die Schaltfläche nicht angeklickt werden, was ist, was ich will, und dann, nachdem ich eine Antwort vom Server erhalten die Schaltfläche wieder aktiviert ist, aber in firefox öffnen sich zwei dateiauswahldialoge gleichzeitig. Dies liegt an der obigen Funktion, und ich binde die Funktion erneut mit bind(). Hat jemand irgendwelche Vorschläge zur Aktivierung, dann deaktivieren Sie die Schaltfläche, ohne den Code (Funktion) des Klickereignisses erneut einzugeben.

So etwas wäre vorzuziehen:

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

ich versucht habe, die on() und off() und sie scheinen nicht zu funktionieren.

Antwort

7

SOLUTION - dank Eric

änderte ich meine ersten Klick-Funktion auf die folgenden:

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

Und ich brachte die die Taste

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

abzuschalten folgende Und dies wieder zu aktivieren:

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

Ich habe das auch benutzt, aber festgestellt, dass das 'else' unnötig/redundant ist. –

+1

Ich musste ein Klick-Ereignis auf '# file' auslösen, wenn der' # file-button' angeklickt wurde. Also war die else-Anweisung notwendig. – ramo

+0

Dies funktioniert nicht mehr, bitte beachten Sie diesen Link: http://StackOverflow.com/Questions/15122526/disable-Button-in-Jquery –

0

Versuchen Sie Attr jQuery-Funktion.

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

Code getestet

<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

Dies funktioniert nicht. Die Klick-Funktion, die ich in meinem JavaScript-Code habe, überschreibt das deaktivierte Attribut, während es die Klick-Funktion abhört. – ramo

+0

werfen Sie einen Blick auf aktualisierte Antwort .. –

+0

Ihre aktualisierte Antwort funktioniert auch nicht. [codepen] (http://codepen.io/anon/pen/onIFp) – ramo

0

Sie haben Eingabeknopf, um beziehen Taste zu deaktivieren,

So etwas wie unten

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

Dies funktioniert nicht. Die Klick-Funktion, die ich in meinem JavaScript-Code habe, überschreibt das deaktivierte Attribut, während es die Klick-Funktion abhört. Und es ist übrigens kein Submit-Button, es ist die Dateiauswahl-Taste, die nur in einem '

+1

hast du versucht mit prob ......? – EnterJQ

+0

Sorry, habe ich was versucht? – ramo

3

Deaktivieren Sie die Schaltfläche mit jQuery $.prop() Funktion:

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

eine bedingte zum Click-Handler hinzufügen, wenn die Schaltfläche deaktiviert ist zu überprüfen:

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

Später wieder aktivieren Sie die Taste:

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

Oder Sie in der Lage sein, das Submit-Ereignis anstelle eines Klicks zu verwenden, wenn ein Formular involviert ist:

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

Ich denke, Sie haben einen logischen Fehler mit dieser Zeile 'if ($ (this) .is (': deaktiviert')) {' Wie überprüfe ich, um sicherzustellen, dass deaktiviert es auf false gesetzt, nicht wahr. – ramo

+0

Sie haben Recht. Bearbeitet, um es zu beheben. Fügen Sie einfach ein '!': 'If (! $ (This) .is (': disabled'))' –

+0

Ich habe es mit ein wenig Änderung Ihres Codes behoben, werfen Sie einen Blick auf die Lösung in meiner Frage. Danke für die Idee Eric! – ramo

Verwandte Themen