0

jquery ui 日付ピッカー:

オプションを次のように obj として渡したい:

  obj = {
     beforeShow: function(input) {
         console.log(this);   
     }
  }

this : のように呼び出すとobj.beforeShow()、「this」は上部に定義した obj として出力されます。このように呼び出すと$("#somelement").datepicker(obj);、 'this' が jquery object として出力されます#someelement

私の要件は次のとおりです。

ボタン パネルにカスタム ドロップダウンを追加しました。それらには「昨日、先月」が含まれています。同じコードを使用して、この選択ボックスをイベントの関数に追加しbeforeShowますonChangeMonthYear。これらのイベントは、最初に を表示するdatepickerとき、および月、年が変わるときに自動的に呼び出されます。しかし、「日付」が変更されたときに発生するイベントが見つかりませんでした (その月の 20 から 22 のように)。beforeShowそこで、 を呼び出してそのオブジェクトのイベントを呼び出したいと思いますthis.beforeShow()。ただし、「this」は html 要素を参照します。実際には、「this」の代わりにオブジェクト変数(obj)を直接使用するなど、いくつかの通常の方法に従って動作させましたが、正しい方法を知りたいです。

4

1 に答える 1

0
 obj = {
     beforeShow: jQuery.proxy(function(input) {
         console.log(this);   
     }, this)
  }

上記のコードを試してください。

編集:説明

これはスコープの問題です。ある関数を他の関数の内部で定義する場合、内部関数のthis内部は内部関数を参照します。内部関数の内部で外部関数ではなく他のオブジェクトを参照する場合thisは、次のようにします。

 var objectX = function(){};
 obj = {
     beforeShow: jQuery.proxy(function(input) {
         console.log(this);   
     }, objectX)
  }

最初のコードスニペット の参照:jQuery.proxyが行うことはthis、外部関数を参照するように内部内部関数を変更することです。同じことをする他の方法があります。そのような方法の1つを以下に示します。thisこれは、内部関数が何らかの理由で内部関数を参照するようにしたい場合に便利です。

 var _self = this;
 obj = {
     beforeShow: function(input) {
         console.log(_self);
     }
  }
于 2012-12-22T06:59:08.813 に答える