blockUI异常'parentNode'未定义

Par*_*rde 7 jquery blockui jquery-blockui

我有巨大的JavaScript代码,并通过你的blockUI.js阻止解锁UI(http://malsup.com/jquery/block/)

我得到"无法读取未定义的属性'parentNode"随机异常.

似乎我的代码中的阻塞/解除阻塞序列已经脱离了sync.ex. 因为有多个html模板,它可能会阻塞两次并解锁一次,反之亦然.我很难分析所有代码并修复订单.

我能够产生一个问题的小提琴.有人可以看看并建议快速解决?

http://jsfiddle.net/pareshvarde/D8KW4/

<script type="text/javascript">
    $(function () {
        $("#blockButton").click(function () {
            myBlock($('#blockSection'));
        });

        window.setInterval(function () {
            myBlock();
            myBlock($('#blockSection'));
            window.setTimeout(function () {
                myUnblock();
                myUnblock($('#blockSection'));
            }, 5000)
        }, 2000);

        $("#unBlockButton").click(function () {
            myUnblock($('#blockSection'));
        });
    });

    myBlock = function (surroundingControl, message) {
        console.log('blocking');

        if (message)
            $("#loader h4").text(message);
        else
            $("#loader h4").text('Loading...');

        if (surroundingControl)
            surroundingControl.block({ message: $('#loader'), baseZ: 1200 });
        else {
            $.blockUI.defaults.message = $('#loader');
            $.blockUI.defaults.baseZ = 1200;
            $.blockUI.apply();
        }
    };

    myUnblock = function (surroundingControl) {
        console.log('unblocking');

        if (surroundingControl)
            surroundingControl.unblock();
        else
            $.unblockUI.apply();
    };
</script>
Run Code Online (Sandbox Code Playgroud)

Par*_*rde 3

好吧,我终于解决了这个问题。基本上,我创建了一个动态元素,并将加载程序的内容放入该 div 中,并使用它进行阻塞。

我更新的 myBlock 函数如下:

myBlock = function (surroundingControl, message) {            
        console.log('blocking');

        if (message)
            $("#loader h4").text(message);
        else
            $("#loader h4").text('Loading...');

        var messageContent = document.createElement('div');
        if ($('#loader') !== undefined)
            $(messageContent).html($('#loader').html());
        else
            $(messageContent).html("Loading....");

        if (surroundingControl)
            surroundingControl.block({ message: messageContent, baseZ: 1200 });
        else {
            $.blockUI.defaults.message = messageContent;
            $.blockUI.defaults.baseZ = 1200;
            $.blockUI.apply();
        }
    };
Run Code Online (Sandbox Code Playgroud)