2011-10-26 8 views
0

これは言葉の奇妙な質問ですので、基本的には次のように言います。私はこれがあります。どのようにチェーンをjqueryで終了させて​​から、関数を実行しますか?チェーン関数の中にあるときはすべて

$("#dialog-areyousuremodal").dialog({ 
    resizable: false, 
    height: 120, 
    modal: true, 
    buttons: { 
     "Yes": function() { 
      $(this).dialog("close"); 
      // more stuff coming soon 
      }, 
     "No": function() { 
      $(this).dialog("close"); 
     } 
    } 
}).end().centerFixed(); 

<div class="hidden" id="dialog-areyousuremodal" title="Delete Confirmation"> 
    <p>Are you sure you want to delete this row?</p> 
</div> 

をそして私はこのようなjqueryのを拡張するカスタム関数を作成しました:

(function($){ 
    $.fn.extend({ 
     centerFixed: function() { 
      return this.each(function() { 
      $(this).end(); 
      $(this).css({position:"fixed"}); 
      $(this).css("top", (($(window).height() - $(this).outerHeight())/2) + "px"); 
      $(this).css("left", (($(window).width() - $(this).outerWidth())/2) + "px"); 
      }); 
     } 
    }); 
})(jQuery); 

私の目標は、(.ENDを交換することである)centerFixed();。ちょうど.centerFixed();で。ご覧のとおり、.end()をカスタム関数の中に入れてみましたが、うまくいきません。私は、ダイアログの最後に.end()を置かなければならない、あるいは新しい行に.centerFixed()を置くことを避けようとしています。

この問題に関するご意見はありますか?

+0

を使用することになり、私は私の頭を悩まだし、*なぜ*あなたの考えることはできませんこれをやりたい'end()'を使うことができない理由を説明できますか?もっと簡単な解決法がありますか? – Clive

+1

なぜ私は私の機能を実行する前にチェーンを終了する必要があるのか​​を尋ねる:その理由は、CSSを変更する前にjqueryuiのダイアログウィンドウを作成する必要があるからです。 –

+0

あなたがなぜend()をタイプする必要がないか、または改行に行く必要がないのはなぜですか?私のチームメイトがそれを動作させたいからです。 (私は知っている、そのクレイジーしかしねえ...私は投票した) –

答えて

1

あなたは単にcenterFixed()と呼んでも、それが最後に呼び出された機能の連鎖の概念を持たないとき、私は恐れることはできません。知っているのはthisです。これは、以前のチェーンメソッドで呼び出された関数から返されるオブジェクトです。

あなたはdialog()へのコールの終了時に、それを連鎖しているので、centerFixed内の変数thisは(私はUIダイアログオブジェクトだと思います)dialog()への呼び出しの結果であるものは何でも対象となります。

ダイアログが作成されたときにあなたのコードにのみ実行されていることを確認したい場合は、それを行うための好ましい方法は、プラグインのcreate event

関連する問題