У меня есть диалоговое окно подтверждения jQuery, которое не запускает событие, связанное с кнопкой по умолчанию, когда пользователь нажимает Enter; когда я использую мышь, кнопка ведет себя как ожидалось.
Кнопка "По умолчанию" ( "Отмена" ) выделяет, когда я нажимаю кнопку ввода, но ничего больше не происходит.
Это диалог:
И вот код, который создает вышеупомянутый диалог:
$(document).ready(function () {
$('#m_btnNext').click(function (e) {
var my_messages = 'warning';
if (my_messages.length > 0) {
e.preventDefault();
$('#dialog-confirm-withdraw').html(my_messages);
$("#dialog-confirm-withdraw").dialog("open");
return false;
}
return true;
});
var cascadeConfirmWithdrawMarkup = "<div id='dialog-confirm-withdraw' title='Withdraw'><p>Set on build</p></div>";
$(cascadeConfirmWithdrawMarkup).appendTo('body').hide();
$('#dialog-confirm-withdraw').dialog({ title: '<span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>Withdraw Warnings',
width: 400,
height: 175,
resizable: false,
draggable: false,
modal: true,
autoOpen: false,
open: function () {
$('.ui-dialog-buttonpane button:eq(1)').focus();
},
buttons: {
"Proceed with withdraw": function () {
$(this).dialog("close");
},
"Cancel": function () {
$(this).dialog("close");
}
}
});
});
В своей простейшей форме этот код отлично работает, но я испытываю огромные трудности, выявляя виновника в своей реальной форме.
Я прокомментировал все остальные javascript, поэтому существует только указанный выше код; на консоль не регистрируются ошибки; но ничего не происходит.
Если в моем js нет очевидной ошибки, что лучший способ найти иглу в этой стоге сена?
Мазохисты могут загрузить полную html-страницу (со всеми javascript), здесь. Я использовал FF Save As "Web Page, Complete", чтобы создать этот почтовый индекс.
Имейте в виду, что я только добавляю функциональность к этой форме; Я не создал его.
В halcyonCommon.js у вас есть функция KeyListener(), которая вызывается при загрузке документа. Эта функция добавляет прослушиватель событий для keydown и, похоже, обрабатывает escape и вводит события keydown для всего документа:
case KeyCode.Enter:
if (el.tagName == "INPUT") {
switch (el.type) {
case "checkbox" :
case "password" :
case "radio" :
case "text" :
{ //Check for datebox and timebox, has controller --> onblur before click OK
if (el.Controller && el.Controller.onblur)
el.Controller.onblur({target : el});
return oThis.clickAction(oThis._DefaultButton, e);
}
break;
case "file" ://ThamHNguyen, added 14-NOV-06
return oThis.clickAction(oThis._DefaultButton, e);
break;
default:
return true;
}
} else if (el.tagName == "SELECT") {
return oThis.clickAction(oThis._DefaultButton, e);
} else if (el.tagName == "HTML" || el.tagName == "BODY" || el.tagName == "TD") { //"TD" : on IE only
return oThis.clickAction(oThis._DefaultButton, e);
} else if (el.tagName == "TEXTAREA" || el.tagName == "A" ) {
return true;
} else {
return false; //Prevent default button of IE
}
См. последний случай else? Удаление, которое решает проблему, но возможно, что это приведет к нежелательному поведению в другом месте вашей программы. Если это так, вам нужно добавить третий возможный случай для возврата истины (и, следовательно, обеспечения нормального поведения) в этой строке:
} else if (el.tagName == "TEXTAREA" || el.tagName == "A" )
Например:
} else if (el.tagName == "TEXTAREA" || el.tagName == "A" || el.tagName == "SPAN" )
... хотя это может быть недостаточно определенным.