Передайте asp.net ClientId в функцию Javascript - встроенный как параметр - PullRequest
1 голос
/ 22 ноября 2011

У меня есть кнопка с изображением asp, которую нужно нажать с помощью функции javascript.Нажатие на текстовое поле должно запускать это событие на стороне сервера кнопок изображений при нажатии клавиши ввода.Код выглядит следующим образом: -

Разметка

    <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 в качестве параметра функции Javascript с именем OverridePostBackOnEnter

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');
            }
        }
    };

То, что я нахожу, это: а) я не могу получить правильный ClientId для передачи, я просто получаю либо неопределенное, либо нулевое значение.

и б) если я хард-код и изменитьctrl для 'cmain_ctl00_ImageButton3' __dopostback не вызывает мой серверный код для ImageButton3.

Любая помощь по этому вопросу будет высоко оценена.

Редактировать

Хорошо, думаю, я нашел решение для этого и подумал, что мне следует обновить сообщение, если оно кому-нибудь понадобится.

Сначала я установил «ClientIdMode» на ImageButton3 в «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()"/>

это позволяет мне передавать идентификатор кнопки в функцию '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', вы устанавливаете эти значения и разрешаете '1033 * _dopostpack' вызывать событие на стороне сервера.

Спасибо всем за то, что нашли время для своего дняпомоги мне, высоко ценится.

Ответы [ 3 ]

2 голосов
/ 22 ноября 2011

Используйте ключевое слово 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%>');" />
1 голос
/ 22 ноября 2011

Просто используйте this.id:

OverridePostBackOnEnter(event, this.id); 

Вы также можете изменить метод и просто передать сам элемент:

OverridePostBackOnEnter(event, this); 

РЕДАКТИРОВАТЬ

Чтобы передать ClientID кнопки ImageButton, попробуйте что-то вроде этого:

OverridePostBackOnEnter(event, '<%= ImageButton3.ClientID %>'); 
0 голосов
/ 22 ноября 2011

хак, но это бы сработало ....

<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" />');" />

Затем на стороне сервера установите текстовое свойство литерала для идентификатора клиента кнопки изображения ....

otherControlsClientIDHolder.Text = ImageButton3.ClientID;

И ответ Джеймса Хилла выше, чем мой.Функционально это то же самое, но он чище.+1 к ответу Джеймса Хилла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...