2014-05-11 6 views
13

Meine Schaltfläche verwendet AJAX, um Informationen zur Datenbank hinzuzufügen und den Schaltflächentext zu ändern. Ich möchte jedoch die Schaltfläche nach einem Klick deaktiviert haben (oder die Person kann die Informationen in der Datenablage spammen). Wie mache ich das?Schaltfläche zum Deaktivieren nach dem Klicken in JQuery

HTML

<button class="btn btn-lg btn-primary" id='roommate_but' onclick='load(<?php echo $user_id;?>)'><span class="glyphicon glyphicon-plus"></span> Add Person</button> 

Javascript/AJAX/JQuery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 

function load(recieving_id){          
    if (window.XMLHttpRequest){ 
     xmlhttp = new XMLHttpRequest(); 
    } else{ 
     xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); 
    } 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
      document.getElementById("roommate_but").innerHTML = xmlhttp.responseText; 


     } 

    } 

xmlhttp.open('GET','include.inc.php?i=' + recieving_id, true); 

xmlhttp.send(); 


} 
+2

Haben Sie tatsächlich haben jQuery auf der Seite enthalten? Ich frage, weil - obwohl Sie diese Frage mit 'jQuery' markiert haben - es wird kein jQuery in Ihrem Code verwendet. Daher können die Antworten stark davon abhängen, ob Sie jQuery verwenden können oder nicht. – Steve

+0

Ja, ich benutze JQuery. Ich habe meinen ursprünglichen Post bearbeitet, um den Link zu JQuery anzuzeigen. Irgendwelche Vorschläge, um die Schaltfläche nach einem Klick zu deaktivieren? – user3377126

+4

Bitte verwenden Sie ** kein reines XHR, wenn Sie bereits jQuery verwenden. Es ist extrem hässlich, beides zu mischen. – ThiefMaster

Antwort

17

* Aktualisierte

jQuery Version etwas wie unten sein würde:

function load(recieving_id){ 
    $('#roommate_but').prop('disabled', true); 
    $.get('include.inc.php?i=' + recieving_id, function(data) { 
     $("#roommate_but").html(data); 
    }); 
} 
+0

Wenn ich es in der Ladefunktion hinzugefügt habe, ist die Schaltfläche immer noch anklickbar und es hat seine Funktion gestoppt, Dinge zur Datenbank hinzuzufügen und den Text der Schaltfläche zu ändern. Irgendein bestimmtes Placement für diesen Code, um sicherzustellen, dass er mit den Tasten anderer Funktionen funktioniert? – user3377126

+0

Nach 'ajax' Erfolg entfernen' disabled', Antwort aktualisiert –

+0

Ich ersetzte die gesamte Ladefunktion durch Ihre Ladefunktion (daher ersetzt AJAX für Jquery) und es deaktiviert die Schaltfläche nach einem Klick immer noch nicht (immer noch anklickbar). Es ist jedoch immer noch in der Lage, dasselbe zu tun, was AJAX getan hat, zu einer anderen Seite zu gehen, etwas zu db hinzuzufügen und den Schaltflächentext zu ändern. Wenn es hilft, verwende ich eine Bootstrap-Taste. Was kann ich noch tun? – user3377126

14

Sie können dies, indem Sie das Attribut deaktiviert auf 'behindert' in jquery tun.

$(this).prop('disabled', true); 

Ich habe ein einfaches Beispiel aus http://jsfiddle.net/4gnXL/2/

+0

Sie sollten wissen, wann 'attr' und wann 'prop' zu verwenden ist. Dies sollte mit 'prop' geschehen. Sie können mehr [hier] lesen (https://stackoverflow.com/questions/5874652/prop-vs-attr). –

+0

Ja, ich denke Adam hat Recht. Als ich diesen Code ausprobiert habe: $ ('roommate_but') click (function() { $ (this) .attr ('disabled', 'disabled'); }); , der Button war immer noch nicht deaktiviert. Also muss ich einfach nur auf "prop" umstellen, oder? Irgendein bestimmter Ort, den ich den Knopf setzen kann, um es zur Arbeit zu bringen? Wenn es hilft, benutze ich tatsächlich eine Bootstrap-Taste – user3377126

+0

-1 für die Verwendung von Attr, obwohl '.prop()' gibt es seit Jahren. Jedoch sollten beide * funktionieren. – ThiefMaster