Введите текстовое поле, вызывает кнопку ссылки в Firefox, а не в IE

1

У меня есть текстовое поле в моей форме со ссылкой рядом с ним. id текстового поля является текстовым полем1, а linkbutton - lbSearch

в событии page_load я добавляю:

  this.TextBox1.Attributes.Add("onkeydown", "if(event.which || event.keyCode)
        {
            if ((event.which == 13) || (event.keyCode == 13))                              
            {
                document.getElementById('" + this.lbSearch.ClientID + "').click();
                return false;
            }
        }
        else 
        {
            return true
        }; ");

и в firefox это работает, но в Internet Explorer он не

это потому, что linkbutton получают как

     <a href="..."

как я могу это решить?

не меняя ссылку на кнопку с изображением или обычную кнопку.

linkbutton получает визуализацию следующим образом:

    <a href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$zoeken1$lbSearch", "", true, "search", "", false, true))' id="ctl00_zoeken1_lbSearch">zoek</a>

edit: я попробовал следующее и получил следующее сообщение:

function onkeydown does not always return a value
rule: 1, column: 243

source:


if(event.which || event.keyCode)
{
if ((event.which == 13) || (event.keyCode == 13)) 
{ 
    var link = document.getElementById('ctl00_zoeken1_lbSearch'); 
    __doPostBack(link.id.replace('_','$'),''); 
    return false;
}
else
{
    return true;
}
} 
else
{
return true;
}; 
  • 0
    Попробуйте использовать другой обходной путь, используйте eval ('(' + link.href + ')');
Теги:

2 ответа

0
Лучший ответ

Вам лучше было бы обнаружить ключ ввода с помощью события keypress, а не keydown, и было бы лучше использовать функцию, а не длинную часть кода в атрибуте. Также, если вы хотите предотвратить действие по умолчанию, вам нужно вернуть false в атрибут onkeypress, как показано ниже.

<script type="text/javascript">

function checkEnterPressed(evt, linkButtonId) {
    var charCode = evt.keyCode || evt.which;
    if (charCode == 13) {
        // Do the LinkButton stuff here...
        return false;
    }
    return true;
}

</script>


this.TextBox1.Attributes.Add("onkeydown",
    "return checkEnterPressed(event, '" + this.lbSearch.ClientID + "')");

Выполнение поиска и замены на идентификаторе, чтобы получить значение для перехода на __doPostBack, кажется безнадежно хрупким и взломанным. Я действительно думаю, что вы должны найти другой путь. Вы можете каким-то образом удержать это значение ctl00$zoeken1$lbSearch от объекта this.lbSearch LinkButton?

1

событие click не активируется в тегах Anchor в IE. Это связано с тем, что обработанный тег html не содержит метода onclick

<a href="javascript:__doPostBack('somename','')">text here</a>

Вот обходные пути:

var link = document.getElementById('');

__doPostBack(link.id.replace('_','$'),'');

или

eval('(' + link.href + ')');

EDIT:

Я тестировал следующее в IE, FF, chrome и safari:

<a href="javascript:alert('test');" id="ctl00_zoeken1_lbSearch">zoek</a>
<input type="text" onkeydown="KD(event)" />
<script>
    function KD(e){
        e = e || window.event
        var k = e.keyCode || e.which;
        if(k==13){
            var a = document.getElementById('ctl00_zoeken1_lbSearch');
            //eval(a.href.replace(/javascript:/g,'')); //if this doesn't work use doPostBack
            __doPostBack(a.id.replace('_','$'),''); 
        }
        return false;
    }    
</script>

Я надеюсь, что это сработает для вас сейчас!

  • 0
    почему Firefox работает, а не работает? Вы правы в части рендеринга, хотя. но как я могу перейти к значению href кнопки ссылки на событие ввода текстового поля?
  • 0
    Я получил синтаксическую ошибку: WebForm_DoPostBackWithOptions (new% 20WebForm_PostBackOptions ("ctl00 $ zoeken1 $ lbSearch",% 20 "",% 20true,% 20 "поиск",% 20 "",% 20false,% 20true)) около% 20
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню