Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does jQuery .insertAfter not work in this example?

Tags:

jquery

In the following example, the alert shows, but the #message is blank.

If I comment out the .insertAfter line then the #message is displayed correctly.

Why doesn't the .insertAfter work in this example?

Firebug just steps right over it.

javascript:

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

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

    $('.languageChooser select').bind('click', function() {
        var numberOfItems = $('.languageChooser select option:selected').length;
        $('#message').hide().html("You have selected " + numberOfItems + " " + smartPlural('language',numberOfItems) + ".").fadeIn('slow');

        if(numberOfItems == 1) {
            $('#message').insertAfter('<div>Use the CTRL and SHIFT keys to select multiple items.</div>');
            alert('here');
        }
    });

    function smartPlural(itemName, numberOfItems) {
        if(numberOfItems == 1) {
            return itemName;
        } else {
            return itemName + 's';
        }
    }

});

html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <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"></script>
        <script type="text/javascript" src="javascript/main.js"></script>       
    </head>
<body>
    <div class="languageChooser">
        <div class="title">Please choose a language:</div>
        <select size="4" multiple="multiple">
            <option>C#</option>
            <option>Ruby</option>
            <option>PHP</option>
            <option>VB.NET</option>
            <option>JavaScript</option>
            <option>Scala</option>
        </select>
        <div id="message"></div>
    </div>

</body>
</html>
like image 419
Edward Tanguay Avatar asked Dec 13 '22 02:12

Edward Tanguay


2 Answers

insertAfter works only with elements already existing on the DOM, give a look to the documentation:

The elements must already be inserted into the document (you can't insert an element after another if it's not in the page).

Are you maybe looking for append or appendTo?

like image 166
Christian C. Salvadó Avatar answered Dec 15 '22 16:12

Christian C. Salvadó


In jQuery we use $(element).after([html]) and not $(element).insertAfter([html]). Just change your code to this and it should work.

  google.load("jquery", "1.3.2");
  google.setOnLoadCallback(function() {
      $('.languageChooser select').bind('click', function() {
          var numberOfItems = $('.languageChooser select option:selected').length;
          $('#message').hide().html("You have selected " + numberOfItems + " " + smartPlural('language',numberOfItems) + ".").fadeIn('slow');
          if(numberOfItems == 1) {
                  //$('#message').insertAfter('Use the CTRL and SHIFT keys to select multiple items.');

                  $('#message').after('Use the CTRL and SHIFT keys to select multiple items.');
                  alert('here');
          }
      });
      function smartPlural(itemName, numberOfItems) {
          if(numberOfItems == 1) {
                  return itemName;
          } else {
                  return itemName + 's';
          }
      }
  });
like image 30
GeekTantra Avatar answered Dec 15 '22 15:12

GeekTantra