blockUI异常'parentNode'未定义

时间:2013-10-14 14:27:06

标签: jquery blockui jquery-blockui

我有大量的javascript代码,并通过你的blockUI.js阻止解锁阻止用户界面(http://malsup.com/jquery/block/

我得到“无法读取属性'parentNode”未定义的“异常随机。

似乎我的代码中的阻塞/解除阻塞序列已经不同步了。因为有多个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>

3 个答案:

答案 0 :(得分:2)

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

我的upBated 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();
        }
    };

答案 1 :(得分:2)

通常会出现此问题,因为它找不到“message”属性中指定的DOM元素或者根本没有指定message属性,在这种情况下,您需要确保$('#loader')返回一个元素。

提示:如果您只是需要阻止而不显示任何内容或加载图片,您甚至可以传递message: null

答案 2 :(得分:0)

对我来说,这样做是为了放置一些文本,而不是从html元素中加载文本。

之前:

CREATE TABLE [dbo].[Sale_Target](
   [id] [numeric](8, 0) NOT NULL,
   [Salevalue] [numeric](8, 0)  NULL,
   [Salestring] [varchar](20)  NULL,
   [Date] [Datetime2](7) NULL
) ON [PRIMARY]
CREATE NONCLUSTERED COLUMNSTORE INDEX "NCCI_Sale_Target"  
    ON [dbo].[Sale_Target] (id,Date) 

CREATE TABLE [dbo].[Sale_Source](
   [id] [numeric](8, 0) NOT NULL,
   [Salevalue] [numeric](8, 0)  NULL,
   [Salestring] [varchar](20)  NULL,
   [Date] [Datetime2](7) NULL
) ON [PRIMARY]
CREATE NONCLUSTERED COLUMNSTORE INDEX "NCCI_Sale_Source"  
    ON [dbo].[Sale_Target] (id,Date)

之后

 $.blockUI({
        css: {
            border: 'none',
            padding: '15px',
            backgroundColor: '#000',
            '-webkit-border-radius': '15px',
            '-moz-border-radius': '15px',
            opacity: 1,
            color: '#fff'
        }, message: $('#loadingMessage')
    });

这样,就可以了,结果也一样!