Create a dynamic form preview with jQuery

Posted on July 19, 2009 by Ashley

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

This entry was posted in Downloads, Javascript, Tutorials, Web Tools, Widgets, jQuery and tagged , , . Bookmark the permalink.
Comments
20 discussions around Create a dynamic form preview with jQuery
  1. Mike Mella says:

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

  2. Ashley says:

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

  3. 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.

  4. Ashley says:

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

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

  6. 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.

  7. 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?

  8. Pingback: Twitted by del_javascript

  9. Manuel says:

    Another great tutorial !!! Thanks!!!

  10. Luinet says:

    muy bueno Graciasss Luisnet MCTS.NET

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

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

  13. Braunson says:

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

  14. Braunson says:

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

  15. Ashley says:

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

  16. jyothi says:

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

  17. Ashley says:

    @jyothi yeah it should work in all browsers without any problems

  18. 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!

  19. 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.

  20. 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

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>

Subscribers
1,250
Twitter
510
Comments
1,207
Posts
125