gpt4 book ai didi

javascript - 将 asp.net ClientId 传递给 Javascript 函数 - 作为参数内联

转载 作者:行者123 更新时间:2023-12-04 06:07:05 27 4
gpt4 key购买 nike

我有一个需要通过 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%>');" />

关于javascript - 将 asp.net ClientId 传递给 Javascript 函数 - 作为参数内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230739/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com