У меня есть текстовое поле в моей форме со ссылкой рядом с ним. 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;
};
Вам лучше было бы обнаружить ключ ввода с помощью события 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?
событие 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>
Я надеюсь, что это сработает для вас сейчас!