jQuery UI焦点问题

时间:2016-05-12 11:03:49

标签: jquery-ui

我正在收到问题

  

无法获取未定义或空引用的属性'_focusTabbable'

我正在使用Jquery-ui-1.10.2.custom.js

我在

中遇到问题
if ( !$.ui.dialog.overlayInstances ) {
    // Prevent use of anchors and inputs.
    // We use a delay in case the overlay is created from an
    // event that we're going to be cancelling. (#2804)
    this._delay(function() {
        // Handle .dialog().dialog("close") (#4065)
        if ( $.ui.dialog.overlayInstances ) {
            this.document.bind( "focusin.dialog", function( event ) {
                if ( !that._allowInteraction( event ) ) {
                    event.preventDefault();
                    **$(".ui-dialog:visible:last .ui-dialog-content")
                        .data( widgetFullName )._focusTabbable();**
                }
            });
        }
    });
}

5 个答案:

答案 0 :(得分:6)

当您打开对话框然后在此对话框的操作按钮中调用打开第二个对话框的方法时,会出现此错误。当您尝试关闭第二个对话框时,会出现错误。

要防止这种情况发生,请立即关闭第一个对话框,然后调用第二个对话框。

$('#dialog1').dialog({

    buttons: {
        'No': function () {
            $(this).dialog('close')
        },

        'Yes': function () {

            // This works
            $(this).dialog('close');

            // Open second dialog
            OpenSecondDialog()

            // This doesn't work.  A bug will arise when attempting to close the second dialog
            $(this).dialog('close');

        }
    }
});

答案 1 :(得分:0)

仅供将来参考(以及其他人遇到此问题),在asp.net中部分回发后重新打开对话框时,我在jQuery UI 1.10.3中遇到了同样的错误。我发现这是由于变量$.ui.dialog.overlayInstances应该在对话框关闭之前计算为1。由于每次打开对话框时变量都会增加1,当用户按下关闭按钮时,我的值经常被评估为2或更多。我的解决方案是每次打开对话框时将$.ui.dialog.overlayInstances重置为1。所以:

$("#myDiv").dialog("open");
$.ui.dialog.overlayInstances = 1;

答案 2 :(得分:0)

我打开一个对话框,然后打开另一个对话框以确认在第一个对话框中完成的更改。确认时,它不会关闭打开的第一个对话框。因此,我只是为了摆脱焦点问题而摧毁一切。

$(".ui-dialog-content").dialog('destroy');

我只是将这一个放在最后一个对话框的确认功能中,因此它会破坏我的所有对话框(因为它们具有相同的类)。

答案 3 :(得分:0)

我正在使用jquery-ui-1.12.1并遇到相同的错误,并且Emyr指出此错误已得到解决。

我的第一个解决方法是使用George Beiers方法。在创建dialog2之前先关闭dialog1,然后在关闭dialog2之后再恢复dialog1。结果看起来不太好,但是它清除了除Internet Explorer之外的所有浏览器中的错误。

结果是有一个函数试图在关闭dialog2之前关闭我的dialog1(已关闭)。重新排序代码后,我可以在显示dialog2的同时将dialog1保持打开状态。

如果您无法解决此问题,我的建议是在beforeCloseopen事件上添加控制台日志消息,以注意异常行为。

答案 4 :(得分:-1)

我记得那个错误。 对我来说 我试图通过代码打开一个模态,然后我也通过代码打开了另一个模态... 他们开得很好...但是如果再试一次,我收到了这个错误。 我必须先关闭第一个模态,然后再打开一个新模态。