3

我正在使用 jquery block UI 插件,我的要求是检查用户是否是授权用户,这是我的代码

<script language="javascript" type="text/javascript">

        $(document).ready(function () {
            $('#btnsubmit').click(function () {
                $.blockUI({ css: {
                    border: 'none',
                    padding: '15px',
                    backgroundColor: '#000',
                    '-webkit-border-radius': '10px',
                    '-moz-border-radius': '10px',
                    opacity: .5,
                    color: '#fff'
                }
                });
            });
        }); 

     function ajaxAuth() {
       //UserLogin.IServiceLogin.HelloWorldCC(OnSuccess, OnFailure);
         var usrname = document.getElementById('txtusrname').value;
         var pasd = document.getElementById('txtpassword').value;
         UserLogin.IServiceLogin.GetUseCred(usrname, pasd, onSuccess, onFailed);
     }

     function onSuccess(result) {
         setTimeout($.unblockUI, 0);
         var obj = jQuery.parseJSON(result);

         if (obj.name != "error" ) {
             document.getElementById('labusr').value = obj.name;
             document.getElementById('labpass').value = obj.passd;
             document.getElementById('labkey').value = obj.key;
             location.href = "DesignAPage.aspx";
         } else {
             $.blockUI({ message: $('#question'), css: { width: '350px'} });

//             $('#ok').click(function () {
//                 $.unblockUI();
//                 return false;
//             }); 
         }
     }

     function onFailed(result) {
         alert("failure");
     }

    </script>

所以问题是当我使用 $.blockUI({ message: $('#question'), css: { width: '350px'} });它时,它只会阻塞屏幕一秒钟并解锁屏幕。

任何帮助是极大的赞赏

4

3 回答 3

1

问题是由setTimeout($.unblockUI, 0);. 即使您可能认为调用它会导致附加函数的代码立即运行,但事实并非如此。您可以通过运行以下命令来验证这一点:

setTimeout(function() {
    console.log('one');
}, 0);
console.log('two');

two之前记录one。原因在于 JavaScript 在内部处理计时器的方式。由于它是单线程的,因此没有任何东西可以同时运行。传递 0 毫秒setTimeout只会强制函数在第一个可用时刻运行。在这种情况下,that's right after$.blockUI被调用。

John Resig 在http://ejohn.org/blog/how-javascript-timers-work/上有一篇很好的文章。

于 2012-05-22T16:20:52.240 回答
0

我把你的代码剪掉了一点,但这是有效的。

$(document).ready(function() {
$.blockUI({ css: { 
    border: 'none', 
    padding: '15px', 
    backgroundColor: '#000', 
    '-webkit-border-radius': '10px', 
    '-moz-border-radius': '10px', 
    opacity: .5, 
    color: '#fff' 
    } 
    }); 

    onSuccess();

});

function onSuccess() { 
$.unblockUI();

$.blockUI({ message: "Some message", css: { width: '350px'} }); 

} 
于 2012-05-22T16:12:39.613 回答
0

尝试在 else 块中执行此操作

else {
             $.unblockUI({
                 onUnblock: function () {
                     $.blockUI({ message: $('#question'), css: {
                         border: 'none',
                         padding: '15px',
                         backgroundColor: '#000',
                         '-webkit-border-radius': '10px',
                         '-moz-border-radius': '10px',
                         opacity: .5,
                         color: '#fff'
                     }
                     });
                     $('#ok').click(function () {
                         $.unblockUI();
                         return false;
                     }); 
                   }
             }); 
         }
于 2012-05-22T17:58:45.550 回答