3

在 IE 中,BlockUI unblockUI 不会将等待光标改回默认值。光标在解除阻塞后移动一个像素时立即变为默认值(好像光标图形已更改但光标在移动一个像素之前不会刷新):

This 2009 thread has a fix,但我不够聪明,无法弄清楚如何修改/将其应用于最新的 01-2011 版本的 BlockUI。是否知道如何修改最新版本的插件或解决此 IE 问题的其他好方法?我还没有找到工作

修复(不适用于 01-2011 版本 - 在此区域修改代码)

Add 
els[1].style.cursor = 'default'; 
After 
var els = full ? $('body').children().filter('.blockUI') : $ 
('.blockUI', el);

谢谢你!

4

8 回答 8

5

我滚动浏览了您提供的链接(2009 线程)并在该线程中尝试了这个建议的修复,我认为它可能会起作用:

添加这一行:
   els[1].style.cursor = 'default';
第 389 行之后:
   els = $('body').children().filter('.blockUI').add('body > .blockUI');

它似乎对我有用!如果这也解决了您的问题,请告诉我!

编辑:这是针对 2.36 版的;实际上,您可能希望在此“if-else”块之后的第 392 行之后
   els[1].style.cursor = 'default';
添加:
   var els;
   if (full) // crazy selector to handle odd field errors in ie6/7
      els = $('body').children().filter('.blockUI').add('body > .blockUI');
   else
      els = $('.blockUI', el);

编辑 #2:在 2.37 版中,您将:

添加此行:在此“if-else”块
   els[1].style.cursor = 'default';
之后的第391行之后:
   var els;
   if (full) // crazy selector to handle odd field errors in ie6/7
      els = $('body').children().filter('.blockUI').add('body > .blockUI');
   else
      els = $('.blockUI', el);

于 2011-03-21T18:27:59.880 回答
4

更简单地说,您可以在 blockUI 中添加一个参数:

 $.blockUI({message:'Waiting...',css:{cursor:'default'}});

但是,你也应该把

 $('body').css('cursor', 'auto');

在您调用 $.unblockUI() 的页面中。

于 2012-10-10T08:46:11.563 回答
3

我使用了这样的方法:

$.blockUI({ message: null, overlayCSS: { cursor: "default" } });
于 2014-02-04T13:46:19.327 回答
2

我通过覆盖 $.blockUI.defaults 的全局 onUnblock 解决了这个问题。这样我就不必对 blockUI 源的实际源进行任何更改。

function restoreCursorOnUnblock(element, options)  {
     var els;
    if (full) { // crazy selector to handle odd field errors in ie6/7
        els = $('body').children().filter('.blockUI').add('body > .blockUI');
    } else {
        els = $('.blockUI', el);
    }
     // restore the default cursor
    els.each(function(i,o) {
         $(o).css('cursor', 'default');
    });
}

function addBlockUiToAjaxStart() {
    $.blockUI.defaults.onUnblock = restoreCursorOnUnblock;
    $('body').ajaxStart(function(event,request, settings){
         $.blockUI({message:''});
     });
}
于 2012-01-04T15:55:48.027 回答
1

我在 2.3.7 版本的 javascript 文件中修改了 remove() 函数,如下所示:

// remove the block
function remove(el, opts) {
    var full = (el == window);
    var $el = $(el);
    var data = $el.data('blockUI.history');
    var to = $el.data('blockUI.timeout');
    if (to) {
        clearTimeout(to);
        $el.removeData('blockUI.timeout');
    }
    opts = $.extend({}, $.blockUI.defaults, opts || {});
    bind(0, el, opts); // unbind events

    var els;
    if (full) // crazy selector to handle odd field errors in ie6/7
        els = $('body').children().filter('.blockUI').add('body > .blockUI');
    else
        els = $('.blockUI', el);

    if (full)
        pageBlock = pageBlockEls = null;

    if (opts.fadeOut) {
        els.fadeOut(opts.fadeOut);
        setTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut);
    }
    else
        reset(els, data, opts, el);

   // restore the default cursor
   els.each(function(i,o) {
        $(o).css('cursor', 'default');
   });
};

这是我添加到函数末尾的代码:

// restore the default cursor
els.each(function(i,o) {
     $(o).css('cursor', 'default');
});
于 2011-11-24T18:13:09.890 回答
1

我扩展了功能重置:

// move blocking element back into the DOM where it started
function reset(els, data, opts, el) {
    els.each(function (i, o) {
        // remove via DOM calls so we don't lose event handlers
        $(o).css('cursor', 'default');
        if (this.parentNode)
            this.parentNode.removeChild(this);
    });
    ...

线

$(o).css('cursor', 'default'); 

在图层被移除之前重置光标。

于 2011-05-24T10:20:22.000 回答
0

建议:如果等待光标对您不重要,则转到 jquery.blockUI.js 文件并在 $.blockUI.defaults 部分中,将所有光标值从“等待”更改为“默认”

祝你好运

于 2011-07-28T15:11:47.567 回答
0

这不是一个真正的答案,但我只是将脚本中的光标“等待”样式注释掉,作为目前的解决方法。

于 2011-03-12T17:20:15.940 回答