Событие щелчка срабатывает в IE / Firefox, но Chrome отбрасывает назначение события - PullRequest
6 голосов
/ 30 июня 2009

Я нахожусь в процессе отладки своего веб-приложения и столкнулся со стеной. Я наблюдаю поведение только в Google Chrome, и моя неумелость JavaScript не позволяет мне найти решение.

У меня есть страница ASP с элементом управления <asp:Panel>. На панели я настроил простое текстовое поле поиска и использую <asp:LinkButton> для запуска поиска. Пользователь вводит свой поисковый текст и должен иметь возможность нажать клавишу ввода (для удобство использования ), и результаты поиска отобразятся. Это работает в IE, но не в FireFox. Существует документированное исправление , которое я применил к своей странице и успешно установил FireFox. Golden.

Кроме того, исправление не работает в Google Chrome! Немного подозрительно, я запускаю Firebug для отладки кода ... о, подождите ... это проблема только Chrome. Хорошо, я могу справиться с отладкой javascript без Firebug ( sob ) - я запускаю отладчик Chrome и выполняю код. Оказывается, что исправление javascript, упомянутое ранее, удаляется Chrome.

Сценарий исправления запускается при загрузке страницы и изменяет обработчик нажатий LinkButton:

var defaultButton = document.getElementById('<%= lnkSearch.ClientID %>');
if (defaultButton && typeof(defaultButton.click) == 'undefined') {   
    defaultButton.click = function() {
        alert('function fired');
        var result = true;
        if (defaultButton.click) result = defaultButton.onclick();
        if (typeof(result) == 'undefined' || result) {
            eval(defaultButton.getAttribute('href'));
        }
    };
    alert(typeof(defaultButton.click) != 'undefined');
}

И при запуске страницы в отладчике Chrome я захожу на function WebForm_FireDefaultButton() и получаю строку:

if (defaultButton && typeof(defaultButton.click) != "undefined") { ... }

и по какой-то причине defaultButton.click стало "undefined". Я в тупике ... Чего мне не хватает?

Кроме того, я не использую jQuery, и это не жизнеспособное решение. <ч /> HTML-код:

<div id="abc_pnlSearchPanel" language="javascript" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'abc_lnkSearch')"> 
    <div class="searchPanel"> 
        <span class="searchText"> 
            Type in stuff to search:
        </span> 
        <span style="float: left;">
            <input name="abc:txtSearch" type="text" id="abc_txtSearch" style="width:312px;" />
        </span> 
        <a onclick="this.blur();" id="abc_lnkSearch" class="ButtonLayout" href="javascript:__doPostBack('abc$lnkSearch','')"><span>Search</span></a> 
        <div style="clear: both"></div> 
    </div> 
</div> 

1 Ответ

3 голосов
/ 11 июля 2009

Я не смог определить, почему это происходит в Chrome и других браузерах. Но регистрация скрипта для выполнения в PageLoad решила проблему.

<body onLoad="DefaultButtonFix()">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...