3

私はjqueryブロック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'} });、画面を1秒間ブロックし、画面のブロックを解除することです。

どんな助けでも大歓迎です

4

3 に答える 3

1

問題は によって引き起こされていsetTimeout($.unblockUI, 0);ます。これを呼び出すとコードがアタッチされた関数にすぐに実行されると思うかもしれませんが、そうではありません。これを確認するには、次を実行します。

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

twoの前に記録されますone。これは、JavaScript が内部でタイマーを処理する方法にあります。シングルスレッドであるため、同時に実行されるものはありません。に 0 ミリ秒を渡すsetTimeoutと、最初に利用可能な瞬間に関数が強制的に実行されます。この場合、それは呼び出された直後$.blockUIです。

John Resig は、これについてhttp://ejohn.org/blog/how-javascript-timers-work/で素晴らしい記事を書いています。

于 2012-05-22T16:20:52.240 に答える
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 に答える
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 に答える