tags:

views:

857

answers:

2

When you click you a checkbox I want the message to fade in slowly.

Why doesn't .fadeIn() work in this example?

HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
    <head>
     <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
     <title>Text XHTML Page</title>
     <link href="css/main.css" rel="stylesheet" type="text/css" media="all"/>
     <script type="text/javascript" src="http://www.google.com/jsapi"&gt;&lt;/script&gt;
     <script type="text/javascript" src="javascript/main.js"></script>  
    </head>
<body>
    <div class="checkboxList">
     <div class="title">Languages:</div>
     <div class="row"><input class="checkbox" type="checkbox"/><span class="label">Ruby</span></div>
     <div class="row"><input type="checkbox"/><span class="label">PHP</span></div>
     <div class="row"><input type="checkbox"/><span class="label">C#</span></div>
     <div class="row"><input type="checkbox"/><span class="label">Python</span></div>
     <div class="row"><input type="checkbox"/><span class="label">JavaScript</span></div>
    </div>
    <p id="message"></p>
</body>
</html>

javascript:

google.load("jquery", "1.3.2");

//run when page is loaded
google.setOnLoadCallback(function() {

    $('.checkboxList .row').css('color','red');
    $('.checkboxList input').attr('checked', true);
    $('.checkboxList input').bind('click', function() {
     $('#message').html("You clicked on a checkbox.").fadeIn('slow');
    });

});
A: 

No idea why but I've had trouble chaining this before. You can get the effect you want by using this less elegant code:

google.load("jquery", "1.3.2");

//run when page is loaded
google.setOnLoadCallback(function() {

    $('.checkboxList .row').css('color','red');
    $('.checkboxList input').attr('checked', true);
    $('.checkboxList input').bind('click', function() {
        $('#message').hide(); //just in case
        $('#message').html("You clicked on a checkbox.");
        $('#message').fadeIn('slow');
    });

});
beggs
this feels like voodoo code, you know? Like, the chaining works, but there was probably something that you missed when you tried it, so you've reverted to the dodgier method because it works. It's a dangerous habit to get into...
nickf
Agree... never took the time to figure out why it did not work... but I see CMS' answer explains it. Good to know.
beggs
+6  A: 

No fadeIn is done because the #message element is visible, hide it, add the content and fade it in:

$('#message').hide().html("You clicked on a checkbox.").fadeIn('slow');
CMS