2017-02-24 86 views
1

我想禁用一個輸入,當有關於keyup函數的數據庫結果時。 addClass和removeClass不起作用。他們根本不開火。任何幫助讚賞。jQuery addClass和removeClass不能在keyup ajax調用中工作

$("#patient_code").keyup(function() { 
 
    var patient_code = $(this).val(); 
 
    var patient_category = $('#patient_category').val(); 
 
    var medicine_id = $('#medicine').val(); 
 

 
    var formData = { 
 
    _token: $('[name="csrf_token"]').attr('content'), 
 
    patient_code: patient_code, 
 
    medicine_id: medicine_id, 
 
    patient_category: patient_category 
 
    } 
 

 
    $.ajax({ 
 
    type: "POST", 
 
    url: "/medicines/confirmation/checkConfirmation", 
 
    data: formData, 
 
    dataType: "JSON", 
 
    success: function(response) { 
 
     if (!jQuery.isEmptyObject(response.confirmation_status)) { 
 
     $(".patient_has_confirmationform").show(); 
 
     $(".selected_patient_code").html(response.confirmation_status[0].patient_code); 
 

 
     //THIS IS NOT FIRING      
 
     $(".btnSaveConfirmation").removeClass().addClass("btn btn-borders btn-danger btn-lg disabled").attr("disabled", true); 
 

 
     console.log("there is a result for that patient code "); 
 
     } else { 
 
     $(".patient_has_confirmationform").hide(); 
 

 
     //THIS IS NOT FIRING           
 
     $(".btnSaveConfirmation").removeClass().addClass("btn btn-borders btn-success btn-lg").attr("disabled", false); 
 

 
     console.log("there are no results for that patient code "); 
 
     } 
 
    }, 
 
    error: function(jqXHR, textStatus, errorThrown, data) { 
 
     console.log(jqXHR, textStatus, errorThrown, data); 
 
    } 
 
    }); 
 
});

+0

你確定AJAX請求成功完成?這些類是否實際應用於DOM?他們的規則是否足夠具體? –

+0

@RoryMcCrossan是的。如果有結果,它們會返回一個數組,如果沒有則返回空。該頁面上只有一個具有該類的輸入。而在ajax調用中,這些類根本不會追加。但如果我從其他的刪除removeClass,它的工作原理和禁用按鈕 – raqulka

+0

嘗試將其分離到不同的線路,並檢查確切的問題在哪裏 – Kostis

回答

1

你爲什麼想到removeClass/addClass工作?

  1. 飼料東西.removeClass('Someclass')
  2. 如果要刪除所選擇它.removeClass('btnSaveConfirmation')同一類,怎麼會認識到添加類的元素?
  3. 那麼你的方法應該是這樣this--

    $(".btnSaveConfirmation").addClass('NewClass'); 
    $('.NewClass').removeClass(".btnSaveConfirmation").addClass("btn btn-borders btn-success btn-lg").attr("disabled", false); 
    
+1

謝謝。得到它了。將在3分鐘內接受 – raqulka

+1

謝謝,你給了我一個新的東西知道......:D –

1

是它的工作,如果你做到這一點?我不確定是否jquery在removeClass正確後處理addClass

$(".btnSaveConfirmation").removeClass(); 
$(".btnSaveConfirmation").addClass("btn btn-borders btn-success btn-lg"); 
$(".btnSaveConfirmation").attr("disabled", false); 

編輯: addClassattr不工作,因爲你刪除.btnSaveConfirmation類..

+0

我其實自己嘗試過,並沒有奏效。 – raqulka

+0

如果您對自己的迴應有所瞭解,請回答。 –

1

您移除按鈕類,與removeClass(btnSaveConfirmation),你應該刪除使用特定的類,像$('...').removeClass('btn btn-lg btn-disabled disabled ...');

所以這意味着,你觸發addClass removeClass一次,然後它找不到按鈕。

解決此問題的最佳方法是使用id來識別,而不是類,然後您可以簡單地從您的按鈕中刪除所有類,它將工作。

$("#patient_code").keyup(function() { 
 
    console.log("I do trigger on keyup!"); 
 
    
 
    if ($(".btnSaveConfirmation")[0]) $(".btnSaveConfirmation").removeClass().addClass("btn btn-borders btn-danger btn-lg disabled").attr("disabled", true); 
 
    else console.log("There's no button with class: btnSaveConfirmation"); 
 
});
#patient_code { width: 200px; border-radius: 4px; border: 1px solid #444; padding: 0px 5px; height: 25px; line-height: 25px; outline: none; } 
 

 
.btn { 
 
border: 1px solid green; 
 
} 
 
.btn-danger { background: red; } 
 
.btn-lg { height: 200px; } 
 
.disabled { opacity: 0.5; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="patient_code" value="" placeholder="Type in something" /> 
 

 
<button class="btnSaveConfirmation">Button class changes</button>