Jquery Block UI funktioniert nicht, wenn es zweimal verwendet wird?
-
13-12-2019 - |
Frage
Ich benutze das jquery Block UI Plugin, meine Anforderung ist zu überprüfen, ob der Benutzer autorisierter Benutzer ist oder nicht, hier ist mein Code
<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>
das Problem ist also, während ich benutze $.blockUI({ message: $('#question'), css: { width: '350px'} });
es blockiert nur den Bildschirm für eine Sekunde und entsperrt den Bildschirm.
Jede Hilfe wird sehr geschätzt
Lösung
Versuchen Sie, dies in der anderen Block zu tun
generasacodicetagpre.Andere Tipps
Das Problem wird verursacht durch setTimeout($.unblockUI, 0);
.Auch wenn Sie vielleicht denken, dass ein Aufruf dazu führen würde, dass der Code der angehängten Funktion sofort ausgeführt wird, ist dies nicht der Fall.Sie können dies überprüfen, indem Sie Folgendes ausführen:
setTimeout(function() {
console.log('one');
}, 0);
console.log('two');
two
wird vorher protokolliert one
.Der Grund dafür liegt in der Art und Weise, wie JavaScript Timer intern behandelt.Da es Single-Threaded ist, läuft nie etwas gleichzeitig.Übergeben von 0 Millisekunden an setTimeout
erzwingt nur die Ausführung der Funktion zum ersten verfügbaren Zeitpunkt.In diesem Fall ist das gleich danach $.blockUI
wird aufgerufen.
John Resig hat einen schönen Artikel dazu bei http://ejohn.org/blog/how-javascript-timers-work/.
Ich habe Ihren Code ein wenig gehackt, aber das funktioniert.
generasacodicetagpre.