簡體   English   中英

將 asp.net ClientId 傳遞給 Javascript 函數 - 作為參數內聯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM