【问题标题】:Find out which ASP.NET control fired my JavaScript event?找出哪个 ASP.NET 控件触发了我的 JavaScript 事件?
【发布时间】:2012-02-03 12:06:10
【问题描述】:

我创建了一个在文本框的 OnKeyPress 事件上触发的 JavaScript 函数。 基本上,当调用该函数时,会显示一个标签,告诉用户大写锁定已启用。从下面的方法可以看出,如果 Caps Lock 位于 3 个标签上,则会显示 3 个标签,但我想使用传入的参数来找出哪个文本框触发了事件,以便我只显示一个 caps lock 标签。任何想法

我的 JScript 函数在下面,下面是调用文本框之一:

    function capLock(e) {
        kc = e.keyCode ? e.keyCode : e.which;
        sk = e.shiftKey ? e.shiftKey : ((kc == 16) ? true : false);
        if (((kc >= 65 && kc <= 90) && !sk) || ((kc >= 97 && kc <= 122) && sk))
            document.getElementById('divCurrentPasswordCapsLockStatus').style.visibility = 'visible';
            document.getElementById('divNewPasswordCapsLockStatus').style.visibility = 'visible';
            document.getElementById('divConfirmPasswordCapsLockStatus').style.visibility = 'visible';
        else
            document.getElementById('divCurrentPasswordCapsLockStatus').style.visibility = 'hidden';
            document.getElementById('divNewPasswordCapsLockStatus').style.visibility = 'hidden';
            document.getElementById('divConfirmPasswordCapsLockStatus').style.visibility = 'hidden';
    } 

<asp:TextBox ID="txtCurrentPassword" runat="server" TextMode="Password" CssClass="customtxt" onkeypress="capLock(event)"></asp:TextBox>

所以我想用 JScript 函数做如下的事情:

if (e.name=="txtCurrentPassword") 
{
    document.getElementById('divCurrentPasswordCapsLockStatus').style.visibility ='visible';
}
else 
{ 
    document.getElementById('divNewPasswordCapsLockStatus').style.visibility = 'hidden';
    document.getElementById('divConfirmPasswordCapsLockStatus').style.visibility = 'hidden';
}

我正在使用 ASP.Net 4.0

谢谢

【问题讨论】:

  • 你能把'this'传递给你的函数吗?例如onkeypress="capLock(this, event)" 并将您的功能更改为 function capLock(sender, e) {
  • 差不多,我已经尝试过了,但是如何从 sender 参数中获取控件名称。我尝试了以下方法: if (sender.id == "txtCurrentPassword") { alert("Run my Code"); }。但是 sender.id 返回 txtCurrentPassword 控件的完整路径。例如tabContainerMain_tabMain_txtCurrentPassword }

标签: javascript asp.net events onkeypress capslock


【解决方案1】:

好的,所以你需要使用

ClientIdMode="Static"

查看模式的细分http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx

这几乎会在您在页面中指定 ID 时发出 ID,而不是在命名容器尝试并将它们放置时发出。

那么你能把'this'传递给你的函数吗?例如

onkeypress="capLock(this, event)" 

并将您的功能更改为

function capLock(sender, e) {

【讨论】:

  • 谢谢,这行得通。但是我所有的连击现在都画得不一样了?用于显示组合项的向下箭头不再存在,它似乎已被替换为白色框!?
  • :o 我会看看你的 CSS,因为这不应该改变它。
  • YESSSSSSSSSSSSS!!!非常感谢。一切正常。如果您喜欢其他问题,我之前发布了另一个尚未有人回答的问题。搜索: ValidationSummary 控件上的 ASP.Net 垂直间距。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2011-04-16
  • 2017-10-11
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
相关资源
最近更新 更多