Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jquery mobile, disable all button when loading overlay is showed

Actually i can call this code

$(":input").attr("disabled",true); //Disable all input fields

to disable all buttons on my page. But i don't know how good is the performance when i have a lot of button on my page.

I saw a trick that we create a loading indicator overlay, which is above all element on the page => user can not click on the buttons anymore

is there any way to reuse the loading overlay of jquery mobile to archive the above trick? I'm not good at CSS so hopefully someone can help me.

Thanks

Edited:

i ended up with using jquery.blockUI plugin for jQuery and it works as expected. And i added the default div with css from jquery mobile so that i still have the loading message of jquery mobile and the behaviour that i wanted

Working sample here

like image 988
Peacemoon Avatar asked Jul 06 '11 13:07

Peacemoon


3 Answers

A simple way I've just found is to use a fixed background with z-index and opacity:

Add this CSS:

.ui-loader-background {
    width:100%;
    height:100%;
    top:0;
    margin: 0;
    background: rgba(0, 0, 0, 0.3);
    display:none;
    position: fixed;
    z-index:100;
}

.ui-loading .ui-loader-background {
    display:block;
}

ui-loader-background is a custom class, but ui-loading is added by JQM to the <html> element when the loading spinner is shown.

And add this element in your body:

<div class="ui-loader-background"> </div>

example : http://jsfiddle.net/5GB6B/1/

like image 92
Xorax Avatar answered Nov 19 '22 23:11

Xorax


In my case I use:

$("body").addClass('ui-disabled');
$.mobile.loading("show",{
text: "Cargando",
textVisible: true
});

Shows loading custom message and disable the entire page.

When you've finish your task, then you need to:

$.mobile.loading("hide");
$("body").removeClass('ui-disabled');

Hope helps you

like image 14
technology_dreamer Avatar answered Nov 20 '22 00:11

technology_dreamer


I've made a small edit to the working solution provided by Xorax to move the loader background to the leftmost of the browser window as I noticed in my Chrome browser there was some area not fully covered:

.ui-loader-background {
    width:100%;
    height:100%;
    left:0;
    top:0;
    margin: 0;
    background: rgba(0, 0, 0, 0.3);
    display:none;
    position: fixed;
    z-index:100;
}
like image 1
Got Hima Avatar answered Nov 20 '22 00:11

Got Hima