2013-01-21 31 views
5

我想通過TypeScript/JQuery找出DOM元素的位置和高度/寬度。 打字稿之前,我壓根兒是這樣的:如何通過使用TypeScript/jQuery傳遞元素

 function ActOnClick(itemClicked, loadPath) { 
      //sample code 
      var v1 = itemClicked.offset(); 
      var v2 = itemClicked.width(); 
      var v3 = itemClicked.height(); 

     }; 

     $(document).ready(function() { 

      $("#idCRM").click(function() { 
       ActOnClick($("#idCRM"), "/Widgets/GetCRM"); 
      }); 
} 

其中idCRM是「部分的」我的文檔CSHTML中(但它可以是任何股利等)

現在我試圖移動這個代碼到TypeScript中,但我期望在ActOnClick函數中從jQuery的$(「#idCRM」)中得到什麼類型?現在我選擇'元素',但a)它不暴露寬度,高度等和b)由$(「#idCRM」)引起的ActOnClick調用失敗!

/// <reference path="../../ScriptsTS/jquery.d.ts" /> 
function ActOnClick(itemClicked: Element, loadPath: string) { 

    var v1 = itemClicked.offset(); <-- FAILS 
    var v2 = itemClicked.width(); <-- FAILS 
    var v3 = itemClicked.height(); <-- FAILS 

}; 

$(document).ready(function() { 

    $("#idCRM").click(function() { 
     ActOnClick($("#idCRM"), "/Widgets/GetCRM"); <-- FAILS 
    }); 
} 

回答

14

如果您需要的代碼只是工作,你總是可以使用Any打字稿類型,如:

function ActOnClick(itemClicked: Any, loadPath: string) { 
    var v1 = itemClicked.offset(); 
    var v2 = itemClicked.width(); 
    var v3 = itemClicked.height(); 
}; 

打字稿上Any變量基本上關閉了,也不會發出任何錯誤或警告。然而,$("#idCRM")應該返回實現JQuery接口的對象,在jquery.d.ts定義,所以你其實應該使用:

function ActOnClick(itemClicked: JQuery, loadPath: string) { 
    var v1 = itemClicked.offset(); 
    var v2 = itemClicked.width(); 
    var v3 = itemClicked.height(); 
}; 

offset()width()height()方法在該接口上定義,和他們返回Objectnumber和分別爲number

+0

謝謝你,但JQuery似乎並沒有公開寬度()等.. – Marcel

+0

我的版本(從[DefinitelyTyped](https://github.com/borisyankov/DefinitelyTyped)(jQuery的1.8.d.ts))公開寬度方法 – SWeko

+0

是的 - 你是對的! - 感謝那 – Marcel