我有一个 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");
}
}
});
});
最简单的形式,this code works fine ,但我很难以我的真实形式找出罪魁祸首。
我注释掉了所有其他的 javascript,所以只有上面的代码存在;没有错误记录到控制台;但什么也没有发生。
如果我上面的js没有明显的错误,大海捞针最好的方法是什么?
受虐狂可以下载完整的 html 页面(带有所有 javascript),here .我使用 FF 的另存为“网页,完整”来创建该 zip。
请记住,我只是向此表单添加功能;我没有创建它。
最佳答案
在 halcyonCommon.js 中,您有一个名为 KeyListener() 的函数,该函数在文档加载时调用。该函数为 keydown 添加了一个事件监听器,它似乎正在处理整个文档的转义和输入 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 案例了吗?删除它可以解决问题,但这可能会导致程序中其他地方出现不良行为。如果是这样,您需要在此行中添加第三种可能的返回 true 的情况(因此允许正常行为):
} else if (el.tagName == "TEXTAREA" || el.tagName == "A" )
例如:
} else if (el.tagName == "TEXTAREA" || el.tagName == "A" || el.tagName == "SPAN" )
...虽然这可能不够具体。
关于javascript - jQuery 对话框不响应键盘按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12862823/