2011-02-18 63 views
0

我創建了一個插件,根據隱藏字段創建一個基於隱藏字段的複選框圖像。我想重寫is()函數...這可能嗎?我基本上使用圖像來模擬複選框。如何覆蓋我的插件的jQuery全局函數?

HTML:

<input type="hidden" value="1" id="box" /> 

創建隱藏字段插件:

$('#box').myCheckbox(); 

我想能夠做到以下幾點:

$('#box').is(':checked'); 

是否有可能覆蓋我的插件中的is()函數?

回答

2

沒錯:)

  (function() { 
       var proxied = jQuery.fn.is; 
       jQuery.fn.is= function() { 
       //do your things here 
       return proxied.apply(this, arguments);//call the default is here 
       }; 
      })(); 

順便說一句:checked已經默認支持

所以如果u有

$( '#複選框')是( ':檢查');//返回true/false取決於如果勾選複選框不要過於複雜的事情,因爲你會拉你的頭髮出來後,當你忘了你做了這壓倒一切的變化:)

+0

我沒有完成我的問題。我沒有提到我使用圖像嘲笑複選框。 – 2011-02-18 10:46:30

+0

工程就像一個魅力! `var proxied = jQuery.fn.is; $ .fn.is = function(){ \t var t = $(this); (t.data('myCheckbox')!==未定義){ \t \t if(arguments。length === 1 && arguments [0] ===':checked'){ \t \t \t return t.data('myCheckbox')。getState()=== 1; \t \t} \t} \t return proxied.apply(this,arguments); };` – 2011-02-18 11:11:41

1

爲什麼你不能使用.attr('checked')

+0

因爲我模擬一個「真正的」複選框(jQuery明智)。但我實際上在使用圖像。 – 2011-02-18 10:42:51

3

您可以擴展jQuery的選擇器並添加新的選擇器。

http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/

例如:

$.extend($.expr[':'],{ 
    inline: function(a) { 
     return $(a).css('display') === 'inline'; 
    } 
}); 

這允許你做:

$(':inline'); // Selects ALL inline elements

$('a:inline'); // Selects ALL inline anchors

編輯:

在你的情況下,模仿的複選框,首先抓住從jQuery的代碼:檢查...這就是:

return elem.checked === true; 

然後

$.extend($.expr[':'],{ 
    checked: function(a) { 
     if(a.isMySpecialCheckbox()) return a.hasAPropertyThatSignifiesChecked; 
     else return elem.checked === true; 
    } 
}); 

嘗試,我還沒有嘗試過,但它應該工作。