Use your left/right keys to browse tutorials
Create a dynamic form preview with jQuery

Create a dynamic form preview with jQuery

1 Star2 Stars3 Stars4 Stars5 Stars
Posted on July 19, 2009

I recently had the need to build a dynamic form preview tool for work so clients could preview how the text and images would look before submitting the content to be published. I’ve trimmed down the code and removed the database part completely from this example so we can concentrate purely on the JavaScript.

The JavaScript

$(document).ready(function(){
$('#preview').hide();	
$("#photo").click(update);
$("#title").keypress(update);
});
	
function update(){		
		
$('#preview').slideDown('slow');
var title = $("#title").val();
var photo = $("#photo").val();
$('#Displaytitle').html(title);
$('#image').html('<img src="'+photo+'"/>');
}

The HTML



  
  
  <div class="left">
    <form>
      Choose a site<br/>
      <select name="pic" class="click" id="photo">
        <option value="images/photo1.png">Tweet.me.it</option>
        <option value="images/photo2.png">Dotdashcreate.com</option>
        <option value="images/photo3.png">Papermashup.com</option>
      </select>
      <br/>
      Add a Tagline
      <textarea id="title" class="click" name="title" cols="40" rows="4">This is your default advert text. </textarea>
    </form>
  </div>
  <div class="right">
    <noscript>
    This is where you could put a link for users who have JavaScript disabled to see a preview
</noscript>
    <div id="preview"> This is how your advert will look
      <div id="image"></div>
      <div id="Displaytitle"></div>
    </div>
  </div>
 
<div class="clear"></div>

In the dom ready function we’re simply hiding the div ‘#preview’ as this is our container for the contents of our form preview. next we setup the ‘.click’ and ‘.keypress’ listeners that execute that function ‘update()’ to display the preview of our form contents. Next looking at the ‘update()’ function we firstly display the ‘#preview’ div. Then set the variables ‘title’ and ‘photo’ with the values of the form using the ‘.val()’ attribute. Then to update our form preview we use ‘.html()’ to replace the contents of the selected div.

form-preview

Using .html .append & .prepend

Its useful to know that ‘.html’ will replace the contents of the div with whatever you specify as shown below.

.html()

<div id="replace">This will be replaced</div>

$('#replace').html('with this text');

You can however use ‘.prepend’ and ‘.append’ to add the new contents before or after the current contents as shown below.

.append()

<div id="time">The time is: </div>

$('#time').append('12:00pm');

.prepend()

<div id="time"> is the time</div>

$('#time').prepend('12:00pm');

demodownload



Recent shares

More tutorials from Papermashup
Comments
28 discussions around Create a dynamic form preview with jQuery
  1. Sean P Smith says:

    I was also wondering like how to convert the form values to html, so lets say the value for the drops downs are foo1, foo2 and foo3, how do I output to them as like, say if(value == foo2) { value = $(#thing).html(‘my new html for the element’)} I’ve tried several things but get either null, [object Object] or it breaks… any help would be super appreciated, check out the demo here: http://seanontheinterwebs.com/enews/TestingESigCreator.html

  2. TheDIYworld says:

    Awesome script. Just what I was looking for. It works great and is very simple to set up.

  3. alex says:

    Hello,

    As you can see, if you select the first option in the combobox, nothing happens. So, this is my solution: add $(“#photo”).click(update); before $(“#photo”).change(update); and will work very well.

  4. Eric says:

    I seem to be running into problems having multiple images show separately. Both preview divs show when one of the dropdowns is selected and both dropdowns work independently with the images, but I would like only one preview div to show upon selection of the appropriate dropdown. I hope to create several separate selections within the same form. I posted my problem for review on JSFiddle: http://jsfiddle.net/AckTm/ Any help would be greatly appreciated.

  5. Eric says:

    Nice article! For anyone wanting to use radio buttons, this is what I came up with. There may be a better way, but this seems to work so far.

    $(document).ready(function(){
    $(‘#preview’).hide();
    $(‘input:radio[name=photo]‘).change(update);
    $(“#title”).keyup(update);
    });

    function update(){

    $(‘#preview’).fadeIn(‘slow’);
    var title = $(“#title”).val();
    var photo = $(‘input:radio[name=photo]:checked’).val();
    $(‘#Displaytitle’).html(title);
    $(‘#image’).html(”);

    }

  6. Kyathi says:

    Nice article.

  7. Fredy says:

    Hi all,

    It is nice, but I think it doesn’t work with URLs and pictures, if anybody has an idea, please let me know.

  8. mike says:

    Hi to all! i have a small problem…i’m new to jquery and not very good on javascript.
    I have created mutiple input box with text preview in a div and everything ok. I have duplicated and append on id the suffix 2, so url became id=”url2″.
    My problem is that i could have on same page more of it but url+number is created dinamically. How can i check all the url+suffix in the javascript and show the preview in right div?
    below is the code i have:

    $(document).ready(function(){
    //$(‘#preview’).hide();
    $(“#title_before”).keyup(update);
    $(“#title_link”).keyup(update);
    $(“#title_after”).keyup(update);
    $(“#url”).keyup(update);
    $(“#title_before2″).keyup(update);
    $(“#title_link2″).keyup(update);
    $(“#title_after2″).keyup(update);
    $(“#url2″).keyup(update);
    });

    function update(){
    //$(‘#preview’).slideDown(‘slow’);
    var title_before = $(“#title_before”).val();
    var url = $(“#url”).val();
    var title_link = $(“#title_link”).val();
    var title_after = $(“#title_after”).val();
    $(‘#Displaytitle’).html(title_before + ‘ ‘ + title_link + ‘ ‘+ title_after );
    var title_before2 = $(“#title_before2″).val();
    var url2 = $(“#url2″).val();
    var title_link2 = $(“#title_link2″).val();
    var title_after2 = $(“#title_after2″).val();
    $(‘#Displaytitle2′).html(title_before2 + ‘ ‘ + title_link2 + ‘ ‘+ title_after2 );
    }

    Display text 1

    Display text 2

  9. Arthur says:

    This is script is exactly what I would wish for a new website. Just one minor detail: the user input text is one character behind. A or is required to show the last entered character. In the demo it works fine but not on my installation. Tested with Firefox and IE8.

  10. Víctor says:

    Hi, nice work.

    1. I’m using it with a select, multiple text and radio inputs. I don´t know how to use it with radio inputs on that part of the code.

    $(document).ready(function(){
    $(‘#preview’).hide();
    $(“#photo”).click(update);
    $(“#title”).keypress(update);
    });

    2. I just see the char before the current. I can’t see the current char ;)

    Thanks a lot!

  11. jyothi says:

    Thnx a lot really nice code but will this work in all browsers??

  12. Braunson says:

    Sorry forgot wp filters that.. and (without the spaces)

  13. Braunson says:

    Minor problem here hah, Type into the textarea alert(‘woo’); and see what happens!

    • Ashley says:

      @braunson i can’t see anything? nothing happens in FF except adds the alert to the preview. what browser are you using?

  14. Pingback: 網站製作學習誌 » [Web] 連結分享

  15. Pingback: CSS Brigit | Create a dynamic form preview with jQuery

  16. Luinet says:

    muy bueno Graciasss Luisnet MCTS.NET

  17. Manuel says:

    Another great tutorial !!! Thanks!!!

  18. Pingback: Twitted by del_javascript

  19. ryan says:

    not that many people care to support it, but the network I work on enforces IE6 only – and your preview doesn’t work on IE6.

    • Ashley says:

      @Ryan thanks for the feedback, I’m slightly confused as I tested it in IE6 without any problems, could you post a link to a screen shot of how it renders for you?

  20. Pingback: links for 2009-07-20 | Yostivanich.com

  21. Sean O says:

    Nice effect. I think the interface would seem more responsive if the .click() & .keypress() events became .change() and .keyup(), respectively. As it is, SELECT changes and the latest keystroke do not immediately register.

    • Ashley says:

      @sean thanks for pointing that out, I’ve updated the code with your recommendation. It works much better now thanks!

  22. Mike Mella says:

    It would be nice if it degraded gracefully, showing a traditional “preview” link if there’s no JavaScript enabled.

    • Ashley says:

      @mike, thanks for that I’ll make the changes so it does degrade gracefully ;)

    • Sean P Smith says:

      How would you create that content on a separate html file? That’s really what I’m trying to do, let users customize their email signatures through a form and then they need to grab an html file to use. I’m a js noob so I’m not familiar with what functions you can use.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



Never miss an update from Papermashup

Get notified about the latest tutorials and downloads.

Subscribe by Email

Get alerts directly into your inbox after each post and stay updated.
Subscribe
OR

Subscribe by RSS

Add our RSS to your feedreader to get regular updates from us.
Subscribe

Get in contact

Please use the form below to get in contact. If your question is related to a free script download, please use the comments on the article page as community members are more likely to respond quicker than I can personally.

About Me

I'm Ashley Ford, Co-founder and Technical Director at Harkable.com London, UK. Previously I worked at InMobi, Spotify and MySpace. My interests include photography and making short videos I'm also an avid F1 fan. I'm always working on side projects. Here are a few: Easy Poll, We Deliver.



What do you specialise in?

I spend a lot of time coding in PHP and MySQL, as well as front end XHTML and CSS. I also specialise in javascript and the jQuery framework as well as being an avid designer. You can find me on dribbble

Interested in advertising?

If you'd like to advertise on Papermashup.com please get in touch via the contact link below for advertising opportunities.

How do I contact you

You can contact me here. and I'm available for consultation, freelance, programming book reviews.

Get on the mailing list

Join over 3000 people who have subscribed to the Papermashup inbox message, and be the first to find out about tutorial, competitions and giveaways.