2014-05-11 24 views
13

Mój przycisk wykorzystuje AJAX do dodawania informacji do bazy danych i zmiany tekstu przycisku. Jednak chciałbym, aby przycisk był wyłączony po jednym kliknięciu (inaczej osoba może spamować informacje w bazie danych). Jak mam to zrobic?Wyłącz przycisk po kliknięciu w 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

Czy rzeczywiście mają jQuery zawarte na stronie? Pytam, ponieważ - mimo, że oznaczyłeś to pytanie przez "jQuery" - w twoim kodzie nie ma jQuery. Tak więc odpowiedzi mogą się mocno różnić w zależności od tego, czy możesz użyć jQuery, czy nie. – Steve

+0

Tak, używam JQuery. Zmieniłem mój oryginalny wpis, aby pokazać link do JQuery. Wszelkie sugestie, aby wyłączyć przycisk po jednym kliknięciu? – user3377126

+4

Proszę ** nie ** używaj zwykłego XHR, jeśli już używasz jQuery. To bardzo brzydkie mieszanie obu. – ThiefMaster

Odpowiedz

17

* Aktualizacja

jQuery wersja byłoby coś jak poniżej:

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

Po dodaniu go do funkcji ładowania przycisk jest nadal klikalny i przestał działać, aby dodać elementy do bazy danych i zmienić tekst przycisku. Jakieś konkretne miejsce docelowe dla tego kodu, aby upewnić się, że działa z przyciskami innych funkcji? – user3377126

+0

Po sukcesie 'ajax' usuń' wyłączony', odpowiedz zaktualizowany –

+0

Wymieniłem całą funkcję ładowania na funkcję ładowania (w związku z tym zastępując AJAX dla Jquery) i nadal nie wyłącza przycisku po jednym kliknięciu (nadal klikalne). Jednak wciąż jest w stanie zrobić to samo, co AJAX, przejść do innej strony, dodać coś do db i zmienić tekst przycisku. Jeśli to pomaga, używam przycisku ładowania początkowego. Czy nadal mogę coś zrobić? – user3377126

14

Można to zrobić w jQuery przez ustawienie atrybutu niepełnosprawnych na 'wyłączone'.

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

Zrobiłem prosty przykład http://jsfiddle.net/4gnXL/2/

+0

Powinieneś wiedzieć, kiedy użyć 'attr' i kiedy użyć' prop'. Należy to zrobić za pomocą 'prop'. Możesz przeczytać więcej na ten temat [tutaj] (https://stackoverflow.com/questions/5874652/prop-vs-attr). –

+0

Tak, myślę, że Adam ma rację. Kiedy próbowałem tego kodu: $ ('roommate_but'). Click (function() { $ (this) .attr ('disabled', 'disabled'); }); , przycisk wciąż nie był wyłączony. Muszę tylko zmienić attr, aby podpiąć? Jakieś miejsce, w którym mogę umieścić przycisk, żeby działał? Jeśli to pomaga, w rzeczywistości używam przycisku ładowania początkowego – user3377126

+0

-1 do korzystania z attr, chociaż '.prop()' istnieje od lat. Jednak oba * powinny * działać. – ThiefMaster