8

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

我随机得到“无法读取未定义的属性'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>
4

3 回答 3

4

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

message: null提示:如果您只需要阻止而不显示任何内容或加载图像,您甚至可以通过。

于 2016-04-24T21:44:49.247 回答
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();
        }
    };
于 2013-10-14T17:14:51.370 回答
1

对我来说,已经完成了放置一些文本,而不是从 html 元素加载文本。

前:

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

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

这样,它起作用了,结果相同!

于 2019-05-07T19:39:16.457 回答