[英]Pass asp.net ClientId to Javascript Function - inline as a param
我有一個需要通過 Javascript 函數單擊的 asp 圖像按鈕。 按下回車鍵時,文本框的按鍵也應觸發此圖像按鈕服務器端事件。 代碼如下:-
標記
<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="images/butt_searchoff.png"
class="sb_search" ToolTip="Search the Database" AlternateText="Search" OnClick="ImageButton3_Click" OnClientClick="SetExpandedCount()"/>
<input id="tbSearch" runat="server" class="sb_input" type="text" autocomplete="off" onkeypress="return OverridePostBackOnEnter(event, '" & ImageButton3.ClientID & "');" />
我想將 ImageButton3 ClientId 作為參數傳遞給名為 OverridePostBackOnEnter 的 Javascript 函數。
Javascript 如下所示:
function OverridePostBackOnEnter(event, ctrl) {
if (event.keyCode == 13) {
alert(ctrl);
if ($.browser.mozilla) {
__doPostBack(ctrl, 'OnClick'); //for IE
}
else {
//but for other browsers you should use
__doPostBack(ctrl, 'OnClick');
}
}
};
我發現的是 a) 我無法獲得正確的 ClientId 傳遞,我只是得到未定義或空值。
b) 如果我硬編碼並將 ctrl 更改為“cmain_ctl00_ImageButton3”,則 __dopostback 不會為 ImageButton3 調用我的服務器端代碼。
對此的任何幫助將不勝感激。
編輯
好的,我想我已經找到了解決方案,並認為我應該更新帖子以防萬一有人需要它。
首先,我將 ImageButton3 上的“ClientIdMode”設置為“Static”
<asp:ImageButton ID="ImageButton3" ClientIDMode="Static" runat="server" ImageUrl="images/butt_searchoff.png" class="sb_search" ToolTip="Search the Database" AlternateText="Search" OnClick="ImageButton3_Click" OnClientClick="SetExpandedCount()"/>
這允許我將按鈕的 id 傳遞給函數“OverridePostBackOnEnter”
<input id="tbSearch" runat="server" class="sb_input" type="text" autocomplete="off" onkeypress="return OverridePostBackOnEnter(event, 'ImageButton3');" />
然后我的 Javascript 變成了:
function OverridePostBackOnEnter(event, ctrl) {
if (event.keyCode == 13) {
if ($.browser.mozilla) {
var overridctrl = document.getElementById(ctrl);
__doPostBack(overridctrl.name, ''); //for IE
}
else {
//but for other browsers you should use
var overridctrl = document.getElementById(ctrl);
__doPostBack(overridectrl.name, '');
}
}
};
通過查看“yourForm._EVENTTARGET.value”和“yourForm._EVENTARGUMENT.value”,我可以看到這些值沒有被設置。 通過使用“document.getelementId”並傳遞“control.name”來設置這些值並使“__dopostpack”能夠調用服務器端事件。
請改用this
關鍵字。 在您輸入的onkeypress
事件的上下文中, this
將引用輸入對象。 因此, this.id
就足夠了。 下面的例子:
<input id="tbSearch" runat="server"
class="sb_input" type="text"
autocomplete="off"
onkeypress="return OverridePostBackOnEnter(event, this.id);" />
編輯
完全誤讀了你的帖子。 正確答案如下:
<input id="tbSearch" runat="server"
class="sb_input" type="text"
autocomplete="off"
onkeypress="return OverridePostBackOnEnter(event, '<%#ImageButton3.ClientID%>');" />
只需使用this.id
:
OverridePostBackOnEnter(event, this.id);
您還可以更改方法並只傳入元素本身:
OverridePostBackOnEnter(event, this);
編輯
要傳入 ImageButton 的 ClientID,請嘗試以下操作:
OverridePostBackOnEnter(event, '<%= ImageButton3.ClientID %>');
另一種方法是在頁面加載時添加屬性服務器端。
tbSearch.Attributes.Add("onkeypress", "return OverridePostBackOnEnter(event, '" + ImageButton3.ClientID + "');");
這是hacky,但這會起作用......
<asp:ImageButton ID="ImageButton3" runat="server" ImageUrl="images/butt_searchoff.png"
class="sb_search" ToolTip="Search the Database" AlternateText="Search" OnClick="ImageButton3_Click" OnClientClick="SetExpandedCount()"/>
<input id="tbSearch" runat="server" class="sb_input" type="text" autocomplete="off" onkeypress="return OverridePostBackOnEnter(event, '<asp:Literal ID="otherControlsClientIDHolder" runat="server" />');" />
然后在服務器端將文字的 text 屬性設置為圖像按鈕的客戶端 ID....
otherControlsClientIDHolder.Text = ImageButton3.ClientID;
上面詹姆斯·希爾的回答比我的好。 它在功能上是一樣的,但他的更干凈。 +1 對 James Hill 的回答
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.