2012-05-08 11 views
1

私はこのようなjQueryの.hide()関数の修正:私はこのように私は.trigger('hide')を使用する必要はありませんでした添付機能)子供が隠されているときにイベントがトリガされます、jQueryの

/* 
*This chunk will help us attach other functions to the hide events 
*/ 
var _old = $.fn.hide; 
$.fn.hide = function(){ 
    var self = this; 
    _old.apply(this,arguments).promise().done(function(){ 
     self.trigger("hide"); 
    }); 
    return this; 
}; 

を私はhideイベントにメソッドをアタッチします。私はこれで小さな問題に遭遇しました:親要素の関数.hide()にメソッドをアタッチすると、子要素が隠されるたびにメソッドがトリガされるように見えます。このjsfiddleの例を参照してください:http://jsfiddle.net/LQg7W/286/

「メインのdivを非表示」ボタンをクリックすると、メインのdivを非表示にしたときにのみ警告が表示されます。しかし、あなたが見ることができるように、メインのdivの内側にあるタブを切り替えると警告が表示されます。

アタッチされたメソッド(警告ポップアップ)は、指定されたセレクタが非表示($('#main_div'))で他の要素は表示されない場合、どのように呼び出すか知っていますか?

ありがとうございます!

UPDATE:

私はhide()を引き起こしたIDは、私たちが望む1であることを確認します.on('hide'..機能にはほとんどのフィルタを作りました。まだ私が探していた正確な解決策(つまり、ラッパースクリプトを作成する)ではなく、近づいています:http://jsfiddle.net/LQg7W/296/

+0

だから、ボタンが押されたときにのみTEアラートがポップアップしたいですか?代わりにボタンのクリックに対するアラートを攻撃しないでください。 – Th0rndike

+0

ボタンはこの例の '.hide()'を開始するために使われます。アプリケーションでは '.hide()'は異なるアクションから来ることができます。警告は、添付されたメソッドが起動したことを通知するだけです。 –

答えて

1

これはあなたが探しているものですか? "tabMe" hideイベントがトリガーされたときにイベントの伝播を避けますが、大きなdivが隠されているときに許可します。

http://jsfiddle.net/LQg7W/294/

+0

これはかなり良いですが、隠される可能性のあるすべての子要素に対して余分な行を追加する必要があります。 main_divの中にたくさんの動的要素があると、たくさんのコードになる可能性があります。私はフィドルをやっていましたが、同様のフィルターを思いついたのですが、hideイベントにメソッドをアタッチしている場所(http://jsfiddle.net/LQg7W/295/)にあります。助けてくれてありがとう! –

+0

私はイベントの伝播と.children()を使用するとうまくいきました。考えてただけ :) – Th0rndike

関連する問題