2012-05-07 21 views
0

最近我問了一個問題,如何將命令綁定到.fadeIn()事件,而不必在每次調用它們時都調用.trigger('fadeIn')。我有一個非常好的解決方案,在this post綁定命令以隱藏事件而不調用.trigger('hide');

但是我試圖做同樣的程序爲.hide()事件是這樣的:

var _old = $.fn.hide; 
$.fn.hide = function(){ 
    var self = this; 
    _old.apply(this,arguments).promise().done(function(){ 
     self.trigger("hide"); 
    }); 
}; 

似乎一般工作,如在此的jsfiddle所示:http://jsfiddle.net/gEVsX/5/

但當我添加此對於腳本,我從看似無關的位置收到錯誤。這是從腳本的這一部分拋出:

$('#unique_div_id').dialog({ 
     autoOpen: false, 
     show: "blind", 
     hide: "explode", 
     modal: true, 
     buttons: { 
      Cancel: function(){ 
       $(this).dialog("close"); 
      } 
     } 
    }); 

它只是初始化一個div爲模態對話框。我假設我得到這個錯誤,因爲我弄亂了jQuery隱藏代碼。我收到此錯誤:

Uncaught TypeError: Cannot call method 'addClass' of undefined

我在這的jsfiddle複製錯誤:http://jsfiddle.net/gEVsX/6/

有誰知道我怎麼能解決我的.hide()功能包裝腳本?

非常感謝!

+0

爲你的「新」hide()'命名,像'rawHide()'等,並保持原來的「old」hide()。 – adeneo

+0

糟糕,我解決了這個問題中提到的答案。抱歉。 –

回答

2

您已破壞hide()方法的合同,該合同被支持爲可鏈接。您的新hide()您需要return this;

+0

太棒了,謝謝你在這裏更新了jsfiddle:http://jsfiddle.net/gEVsX/7/ –

+0

修正了jsfiddle的例子,但不幸的是,當我將'return this;'添加到我的頁面時,現在什麼都沒有顯示出來。 。沒有錯誤 –

+1

使用Firebug查看導致問題的元素。 – SLaks