2014-06-30 78 views
0

我有一些JavaScript來改變日曆擴展控件的功能,我想傳遞一個參數(ID)和參數永遠不會被設置。當我在js文件中硬編碼參數時,該函數起作用,但我無法找到爲什麼我可以將該參數傳遞給該函數。ASP.NET的JavaScript參數爲空

這裏是我使用的ASPX代碼示例:

<ajax:CalendarExtender ID="clxStartMonth" runat="server" TargetControlID="txtStartMonth" Format="MM/yyyy" DefaultView="Months" ClientIDMode="Static" OnClientHidden="onCalendarHidden('clxStartMonth');" OnClientShown="onCalendarShown('clxStartMonth');" ></ajax:CalendarExtender> 

正如你可以看到我試圖通過控制ID由OnClientHidden和OnClientShown事件觸發的功能。

這裏是JavaScript函數:

function onCalendarHidden(clx) { 
var cal = $find(clx); 

if (cal._monthsBody) { 
    for (var i = 0; i < cal._monthsBody.rows.length; i++) { 
     var row = cal._monthsBody.rows[i]; 
     for (var j = 0; j < row.cells.length; j++) { 
      Sys.UI.DomEvent.removeHandler(row.cells[j].firstChild, "click", call); 
     } 
    } 
} 
} 

function onCalendarShown(clx) { 
var cal = $find(clx); 
cal._switchMode("months", true); 

if (cal._monthsBody) { 
    for (var i = 0; i < cal._monthsBody.rows.length; i++) { 
     var row = cal._monthsBody.rows[i]; 
     for (var j = 0; j < row.cells.length; j++) { 
      Sys.UI.DomEvent.addHandler(row.cells[j].firstChild, "click", call); 
     } 
    } 
} 
} 

function call(eventElement) { 
var target = eventElement.target; 
switch (target.mode) { 
    case "month": 
     var cal = $find("clxStartMonth"); 
     cal._visibleDate = target.date; 
     cal.set_selectedDate(target.date); 
     cal._blur.post(true); 
     cal.raiseDateSelectionChanged(); 
     break; 
} 
} 

任何想法,我能做些什麼來解決這個問題?

+0

嘗試記錄函數內部的參數以查看它是否被定義。你能告訴我們這些參數被定義在哪裏嗎? –

+0

該函數確實收到參數,但是我得到一個空引用錯誤。如果我使用參數調用函數,即使我硬編碼控件ID而不是使用參數中的ID,它似乎也找不到控件。 –

+0

JavaScript是否與ASPX位於同一個文件中?或者是否有JavaScript的separte .JS文件? –

回答

1

在運行時查看您的HTML源代碼(右鍵單擊頁面並選擇查看源代碼)。驗證您的控件clxStartMonth實際上是您的控件的ID,並且它未被更改爲其他內容(例如ctl0 $ clxStartMonth ...)。如果控件ID已被更改,請將clxStartMonth控件上的ClientIDMode屬性設置爲「Static」。