【发布时间】:2018-04-13 09:02:11
【问题描述】:
我已经构建了一个常见的错误对话框功能,以获得我的对话框的通用外观。我从$.ajaxSetup.error 函数中调用该函数没有问题。我通过对话框上的调用添加了一个按钮。当从ajaxSetup.error 函数调用时,我的按钮将关闭对话框,角落中的 X 将关闭窗口。
如果我尝试从我的 JS 中的 catch 块中调用相同的函数(不是 AJAX 调用),对话框会毫无问题地打开,但是当我单击按钮关闭对话框时,我会收到以下错误:
0x800a138f - JavaScript 运行时错误:无法获取未定义或空引用的属性“_focusTabbable”
这是生成我的对话框的代码:
function __renderDialogOK(data) {
// This call renders the div to be displayed within
// the dialog.
var divMessage = __renderDialogBase(data);
$(divMessage).dialog(
{
width: __getDialogWidth(),
resizeable: false,
modal: true,
hide: true,
show: true,
buttons: [
{
text: "OK",
click: function (e) {
e.preventDefault();
$(this).dialog("close");
return false;
}
}
],
open: function (e) {
$(this).parent().find("button:eq(1)").addClass('ui-state-default');
$(this).parent().find("button:eq(1)").focus();
$(this).on("keydown", function (event) {
if (parseInt(event.keyCode) === 13) {
$(this).parent()
.find("button:eq(1)").trigger("click");
return false;
}
if (event.keyCode == 27) {
$(this).parent()
.find("button:eq(1)").trigger("click");
return false;
}
});
},
close: function (e) {
$(this).off("keydown");
}
}
);
}
正如您在我的按钮中看到的,我尝试使用$(this) 关闭对话框。我还尝试使用函数外部的变量(全局)来存储对$(divMessage).dialog( 的调用返回的上下文。
这似乎只发生在 IE11 中,这对我来说很不幸,因为我的客户将其作为他们当前的公司标准。最后是我的问题。
在 JavaScript 中输入 Catch 块时是否会丢失所有上下文?这个问题之前是否已经暴露,我只是没有看到线程?我已经阅读了许多关于此类似错误消息的其他线程,但它们似乎不像我的实例那样具体,其中许多似乎是因为对话框尚未启动。我的是。对话框出现在屏幕上。我只是无法用我的按钮关闭它。
【问题讨论】:
-
focus 抛出错误 ** $(this).parent().find("button:eq(1)").focus(); ** $(this).off("keydown");
-
首先感谢@Nisse 的帮助。非常感谢。我把两条线都拿出来了,仍然得到同样的错误。我不确定您为什么提到禁用 keydown 事件以获得焦点。禁用事件是否会导致浏览器重新聚焦?非常感谢任何进一步的帮助,因为我很难过。
-
@Krishjs 我的道歉我看到了编辑并认为 Nisse 发表了评论。感谢您的帮助。 :-) 对不起。
-
您可能希望将
$(this)传递给变量以避免函数之间的混淆。示例:var $me = $(this); var $parent = $(this).parent();,然后在open的其余代码块中使用 $me 和 $parent。
标签: javascript jquery jquery-ui dialog catch-block