2015-04-23 60 views
3

我做一些AJAX是單擊按鈕時無法使用jQuery禁用Twitter引導按鈕?

  $btn.button('loading'); 
      $.ajax({ 
       type: 'PUT', 
       url: 'event/', 
       data: put_data, 
       dataType: 'json', 
       success: function(data){ 
        if (data.redirect) { 
         window.location = data.redirect; 
        } 
        else { 
         $btn.button('reset'); 

         if ($btn.is('#my-btn')) { 
          console.log('disabling button'); 
          $btn.prop('disabled', true); 
         } 
        } 
       } 
      }); 

disabling button在控制檯中顯示出來,但按鈕沒有得到禁止。加載和重置按鈕工作得很好。我試過.addClass('disabled').attr('disabled','disabled'),但那些也不起作用。

在這裏看到:http://codepen.io/anon/pen/Wvbeeg

+0

當你在DOM結構,沒有按鈕具有「已禁用」屬性?或者是不是被設置? –

+3

建議你創建複製問題 – charlietfl

+0

你也可能看起來這裏尋求幫助演示:http://stackoverflow.com/questions/15122526/disable-button-in-jquery –

回答

0

的問題是,button('reset')是異步的。你可以看變化住在HTML中看到他們是不是立竿見影

復位後出現短暫延遲解決了問題,但personallly我只想碼這整個過程我自己,而不是使用引導API

$(document).ready(function() { 
    $('#mybutton').click(function() { 
    var $btn = $(this); 
    $btn.button('loading'); 
    setTimeout(function() {/// mimic ajax delay 
     $btn.button('reset'); 
     setTimeout(function() {// short delay after reset 
     $btn.prop('disabled', true); 

     }, 200); 

    }, 1000); 

    }); 
}); 

DEMO

+0

是不是很危險依靠的200毫秒的曖昧數量的超時?如果計算機處於負載狀態,那麼這不會讓您打開潛在的問題嗎? –

+1

@KivakWolf是的,這就是爲什麼我建議完全遠離使用引導按鈕API。 – charlietfl

-1

你應該重視殘疾人屬性,以便引導可以樣式按鈕(它是一個基於HTML屬性CSS樣式)

[...] 
$trigger.attr("disabled", true); 
[...] 

這裏你可以看到一個工作示例:http://codepen.io/anon/pen/oXNRww(阿賈克斯請求已被替換爲一個的setTimeout)

-1

卸下:

$btn.button('reset'); 

由於某些原因,只有在您將其禁用後纔會評估。 (它是異步的)

與其重置按鈕使用'重置'代碼,它可能會更好,只是刪除disabled屬性,如果它存在。這將有效地啓用按鈕,如果它應該是積極的。

修改後的代碼:

 $btn.button('loading'); 
     $.ajax({ 
      type: 'PUT', 
      url: 'event/', 
      data: put_data, 
      dataType: 'json', 
      success: function(data){ 
       if (data.redirect) { 
        window.location = data.redirect; 
       } 
       else { 
        if ($btn.is('#my-btn')) { 
         console.log('disabling button'); 
         $btn.prop('disabled', true); 
        } else { 
         $btn.prop('disabled', false); 
        } 
       } 
      } 
     }); 

特別提示:不要使用.removeProp()來重新啓用按鈕。這將徹底刪除該財產,你將無法再使用它。更多關於道具()位置:https://api.jquery.com/prop/

-1

這是因爲你使用jQuery綁定一個click事件的按鈕。所以disable屬性將無法阻止它。在您的代碼中,您需要添加以下內容:

$('#mybutton').off('click'); 

這將從該按鈕解除綁定事件。