2013-03-19 82 views
2

我正在創建一個小部件,並在按鈕上單擊我想禁用小部件。UI小部件禁用

(function ($) { 
    $.widget("df.txt", { }) 
})(jQuery); 

$(document).ready(function() { 
    //register input widgets 
    $("input").txt({ disabled: true }); 


    //Register button to disable/enable inputs 
    $("button").click(function() { 
     //$("input").txt("disable"); 
     $("input").txt("option", "disabled", true); 
    }); 
}); 

我使用這個link作爲參考。

這不起作用,有幫助嗎?

回答

1

試試這個

$('input').attr("disabled", true); 

or 

$('input').attr("disabled", 'disabled'); 

這裏我們設置禁用爲true的屬性。

+0

@mandava您是否嘗試過我的代碼 – PSR 2013-03-19 10:26:22

+0

我認爲這是行不通的。也許他試圖做同樣的事情,在這個例子:http://jqueryui.com/widget/ 但我不知道這是什麼txt()函數。 – imclickingmaniac 2013-03-19 10:29:41

+1

txt不是一個函數,它是一個小部件 – mandava 2013-03-19 10:41:48

1

基本小部件只在disabled選項更改時切換某些類。

如果要真正地禁用您的自定義窗口小部件增強的元素,你將不得不重寫_setOption()方法和執行該操作明確:

(function($) { 
    $.widget("df.txt", { 
     _setOption: function(key, value) { 
      this._super(key, value); 
      if (key == "disabled") { 
       this.element.prop("disabled", !!value); 
      } 
     } 
    }); 
})(jQuery); 

然後,你可以寫類似:

// Register button to disable/enable inputs. 
$("button").click(function() { 
    var $inputs = $("input"); 
    $inputs.txt("option", "disabled", !$inputs.txt("option", "disabled")); 
}); 
0
_setOption: function (key, value) { 

      if (key === "disabled") { 
       if (value) { this._Disable(); } 
       else { this._Enable(); } 
      } 

_Enable: function() { 
      this.element.removeAttr("disabled"); 
      this.element.addClass("enable"); 
     }, 

     _Disable: function() { 
      this.element.attr("disabled", "disabled"); 
      this.element.removeClass("enable"); 
     } 
+0

你沒有從你的覆蓋調用基類實現'_setOption()',這是你的意圖嗎?它可能會破壞基本小部件的行爲。還建議使用'prop()'而不是'attr()'來操作像'disabled'這樣的布爾DOM屬性。 – 2013-03-19 18:33:01