Узнать, какой элемент управления ASP.NET запустил мое событие JavaScript?

Я создал функцию JavaScript, которая срабатывает при событии OnKeyPress текстового поля. В основном, когда функция вызывается, отображается метка, сообщающая пользователю, что блокировка заглавных букв включена. Как вы можете видеть из приведенного ниже метода, если Caps Lock включен, отображаются 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

Спасибо


person user1131661    schedule 03.02.2012    source источник
comment
Вы можете передать «это» в свою функцию? например onkeypress=capLock(this, event) и измените свою функцию на function capLock(sender, e) {   -  person Dave Walker    schedule 03.02.2012
comment
Почти я пробовал это, но как мне получить имя элемента управления из параметра отправителя. Я пробовал следующее: if (sender.id == txtCurrentPassword) { alert(Run my Code); }. Но sender.id возвращает полный путь элемента управления txtCurrentPassword. например tabContainerMain_tabMain_txtCurrentPassword }   -  person user1131661    schedule 03.02.2012


Ответы (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

В значительной степени это будет генерировать идентификаторы, когда вы указываете их на странице, а не так, как контейнер именования пытается их поместить.

Тогда вы можете передать «это» в свою функцию? например

onkeypress="capLock(this, event)" 

и измените свою функцию на

function capLock(sender, e) {
person Dave Walker    schedule 03.02.2012
comment
Спасибо, это работает. Однако все мои комбо теперь рисуются по-другому? Стрелки вниз, которая используется для отображения комбо-элементов, больше нет, кажется, она просто заменена белой рамкой!? - person user1131661; 03.02.2012
comment
: o Я бы посмотрел на ваш CSS, так как это не должно меняться. - person Dave Walker; 03.02.2012
comment
ДААААААААААААААААААААААААААААААААААААААААА!!! Большое спасибо. Все работает нормально. Если вам нравятся другие вопросы, я разместил еще один ранее, на который еще никто не ответил. Поиск: Вертикальный интервал ASP.Net в элементе управления ValidationSummary. Спасибо еще раз. - person user1131661; 03.02.2012