Simple jQuery Modal Window Tutorial

Written by Kevin Liew on 17 Mar 2009
637,329 Views • Tutorials

Introduction

In this tutorial, I'm going to share how to create a simple modal window with jQuery. I like jQuery, it makes everything so simple and so easy. In case you don't know what's modal window. You can click here. That's an example of a modal window.

In this website, I'm using facebox (inspiration from facebook). Others, such as lightbox, thickbox, multibox, litebox...... it's too many of them and they all are having different features.

Right, let's start, this example will show you how to create a modal window that will display the content of a DIV #ID.

My objectives are:

  • Able to search the whole html document for A tag NAME="modal" attribute, so when users click on it, it will display the content of DIV #ID in the HREF attribute in Modal Window.
  • A mask that will fill the whole screen.
  • Modal windows that is simple and easy to modify.
Advertisement

1. HTML code and A tag attributes

<!-- #dialog is the id of a DIV defined in the code below -->
<a href="#dialog" name="modal">Simple Modal Window</a>

<div id="boxes">

	
	<!-- #customize your modal window here -->

	<div id="dialog" class="window">
		<b>Testing of Modal Window</b> | 
		
		<!-- close button is defined as close class -->
		<a href="#" class="close">Close it</a>

	</div>

	
	<!-- Do not remove div#mask, because you'll need it to fill the whole screen -->	
 	<div id="mask"></div>
</div>

2. CSS code

<style>

/* Z-index of #mask must lower than #boxes .window */
#mask {
  position:absolute;
  z-index:9000;
  background-color:#000;
  display:none;
}
  
#boxes .window {
  position:fixed;
  width:440px;
  height:200px;
  display:none;
  z-index:9999;
  padding:20px;
}


/* Customize your modal window here, you can add background image too */
#boxes #dialog {
  width:375px; 
  height:203px;
}
</style>

3. Javascript

<script>

$(document).ready(function() {	

	//select all the a tag with name equal to modal
	$('a[name=modal]').click(function(e) {
		//Cancel the link behavior
		e.preventDefault();
		//Get the A tag
		var id = $(this).attr('href');
	
		//Get the screen height and width
		var maskHeight = $(document).height();
		var maskWidth = $(window).width();
	
		//Set height and width to mask to fill up the whole screen
		$('#mask').css({'width':maskWidth,'height':maskHeight});
		
		//transition effect		
		$('#mask').fadeIn(1000);	
		$('#mask').fadeTo("slow",0.8);	
	
		//Get the window height and width
		var winH = $(window).height();
		var winW = $(window).width();
              
		//Set the popup window to center
		$(id).css('top',  winH/2-$(id).height()/2);
		$(id).css('left', winW/2-$(id).width()/2);
	
		//transition effect
		$(id).fadeIn(2000); 
	
	});
	
	//if close button is clicked
	$('.window .close').click(function (e) {
		//Cancel the link behavior
		e.preventDefault();
		$('#mask, .window').hide();
	});		
	
	//if mask is clicked
	$('#mask').click(function () {
		$(this).hide();
		$('.window').hide();
	});			
	
});

</script>

It's very straight forward and easy to understand. Remember, you need to include jQuery framework.

Demonstration Download

4. Launch modal window with Javascript

Due to popular demand :), I have an example for it. The concept is simple. I wrapped the modal window script inside a function, and then you will able to call the modal window using javascript function call.

Yes, you will able to load the modal window on page load as well :)

$(document).ready(function () {
  //id is the ID for the DIV you want to display it as modal window
  launchWindow(id); 
});

Demonstration

And, if you want to close the modal window on key press, any keys you want, you can add the following function.

$(document).keyup(function(e) {
  if(e.keyCode == 13) {
    $('#mask').hide();
    $('.window').hide();
  }
});

Use Cookie on First Load

Another popular demand from readers and this is how you do it. You need two functions (createCookie and readCookie) from this post about web cookies

$(document).ready(function() {
//if the cookie hasLaunch is not set, then show the modal window
if (!readCookie('hasLaunch')) {
	//launch it
	launchWindow('#dialog1');		
	//then set the cookie, so next time the modal won't be displaying again.
	createCookie('hasLaunch', 1, 365);
}

});

Demonstration

Recalculate the Position of Modal window and mask on window resize

Don't know how I missed it, this is the code that reposition the modal window and recalculate the dimension of mask if user resized the windows.

$(document).ready(function () {
$(window).resize(function () {
 
 		var box = $('#boxes .window');
 
        //Get the screen height and width
        var maskHeight = $(document).height();
        var maskWidth = $(window).width();
      
        //Set height and width to mask to fill up the whole screen
        $('#mask').css({'width':maskWidth,'height':maskHeight});
               
        //Get the window height and width
        var winH = $(window).height();
        var winW = $(window).width();
 
        //Set the popup window to center
        box.css('top',  winH/2 - box.height()/2);
        box.css('left', winW/2 - box.width()/2);
 
});

});
I think I should make another post about modal window. :)

5. Conclusion

Yes, that's all you need to make a simple jquery modal window. In this tutorial, it shown you the concept of how to display DIV content inside a modal window. However, you can further develop it to accept a link and display it in an iFrame and image gallery.

For those who's looking for a fully customizable Modal Window, you can try my method, if you have any other questions, please let me know. Thanks for reading.

Update

29-2-2012: - Fixed auto resize, change modal window's position from absolute to fixed.

 

22-5-2009: - Added a new section "Activate modal window with Javascript"

16-4-2009: - If you prefer this article in Portuguese, please visit Simple jQuery Modal Window in Portuguese by Maujor

27-3-09: - Added e.preventDefault() to link to launch the modal window.
- Changed css position to fixed, so that the modal window also fixed to center. - Changed var winH = $(window).height(); to var winH = $(window).height();

24 Mar 09:
- Added e.preventDefault() to cancel the anchor link effect, we can also able to cancel it by removing the href attribute.
- Changed var winH = $(window).height(); to var winH = $(document).height();

Demo Download
Join the discussion

Comments will be moderated and rel="nofollow" will be added to all links. You can wrap your coding with [code][/code] to make use of built-in syntax highlighter.

797 comments
daves 15 years ago
This works great but if I try and save the download it no longer works in IE. Why is that?
Reply
kevin Admin 15 years ago
@Krzysztof: Hi, I have added a new section in the article "Launch modal window with javasccript" and included an example as well. Cheers :)

@daves: oops, I updated the article, but had forgotten to update the zip file! I have fixed that, it's the position problem. :)
Reply
Krzysztof 15 years ago
And how can I display #dialog1 when page loads?
Reply
april 15 years ago
i have downloaded your codes and your demo works fine too. but it doesn't work on my project.

i just feel separating the javascript codes and the css as well so that my html page is clean to look at.

i'm using firefox version 3
Reply
kevin Admin 15 years ago
@april: alright, the script should work even tho the css and js separated. You will have to debug it, and find the cause.

1. make sure the class name is correct and not conflict with other class names.
2. make sure the z-index is correct, the popup menu should have the highest value.

if you can show me your work, that'd be even better :)
Reply
april 15 years ago
already fixed it! just went down on all of the codes and found the problem. silly me, so careless.lolz

nways, i have a new dilemma. in my modal login form, i've set an error message right next to my input incase the user inserted a wrong username or password. but whenever i insert a wrong username/password., the modal box dissappear without showing the error message. and when i click the button to show the login box, the error is there. and so as the username and password i inserted.

is there any way to prevent the modal box to dissappear? unless the user clicked on a close button or on the mask.
Reply
kevin Admin 15 years ago
@April: great! you solved it. What was the problem?

how do you validate the username and password?
Reply
april 15 years ago
i used php to validate my username and password. which is saved at mysql.
Reply
kevin Admin 15 years ago
@april: arr, this a bit tricky. After you clicked on the submit/login button, it navigates to another page? or do you use ajax to validate it?

you can always call the modal window using onload function, I have described it on the top.
Reply
Eshban 15 years ago
HI,

I want to load a modal window on Page load instead of clicking on a link.


Kindly help how can i do this.

Waiting for reply
Reply
kevin Admin 15 years ago
@Eshban: I have already put the script and demo, please read the tutorial.
Reply
april 15 years ago
here's the scene.. hope i could describe this well. in my index page.. i have this login button which activates the login modal box. the login button works, the box appears. inside the box i have a form with two inputs(username&password) and a button that acts as a submit, this activates the validation of the username and password.
besides these two inputs are error messages that appears whenever a user inputs a wrong password.

if the user inputs the correct username and password, the modal should dissappear and back to the index page, at this point, the user is already logged in. i have a session for this.

to be continued...
Reply
april 15 years ago
now my problem is, if i insert a wrong username, the modal box dissappears. what i wanted to happen is that, when a user input a wrong username, the modal box won't disappear but instead show the error message and wait for the user to either click on the mask or insert another username again.

is my explaining confusing?! sorry for that.
Reply