No the markup is all in the component template, the js just needs to add a 
value to a div inside a table cell (see below). Sometimes I am not seeing this 
happen, mostly it does. I ask because I got the impression that adding a js 
alert to the piece of code to debug it seemed to make the code work 
consistently.

John



(function($) {

    T5.extendInitializers(function() {

        var times = null;
        var settime = null;
        var eventLink = null;

        function clickmin(event, ui) {
            if (settime) {
                var el = '#time_' + parseInt(settime.split(':')[0]);
                $(el).text('');
            }
            settime = event.data.time;
            el = '#time_' + parseInt(settime.split(':')[0]);
            $.ajax({url: eventLink,
                type: 'POST',
                data: {time: settime},
                dataType: 'html',
                success: function(data) {
                    $(el).text(settime);
                }
            });
        }

        function init(specs) {
            $links = $('minsel ul.minitems li a');
            times = specs.times;
            settime = specs.settime;
            eventLink = specs.eventLink;

            $('minsel').hide();
            $('minsel').bind('click', function(event, ui) {
                $('minsel').hide();
            });
            if (settime) {
                var el = '#time_' + parseInt(settime.split(':')[0]);
                $(el).text(settime);                                            
   // THIS SOMETIMES FAILS!!
            }

            for (var h = 0; h < 24; h++) {
                var el = '#hour_' + h;
                $(el).bind('click', {hour: h}, function(event, ui) {
                    var min = 0, show = false;
                    var hour = String('00000' + event.data.hour).slice(-2) + 
":";
                    $('#timesel').text(hour + '??');
                    $links.each(function(index) {
                        $(this).attr('data-index', index);
                        var time = hour + String('00000' + min).slice(-2);
                        $(this).hide();
                        $(this).unbind('click');
                        if ($.inArray(time, times) !== -1) {
                            $(this).bind('click', {time: time}, clickmin);
                            $(this).show();
                            show = true;
                        }
                        if (time === settime) {
                            if (!show) {
                                $(this).show();
                                show = true;
                            }
                            $('#timesel').text(settime);
                        }
                        min = min + 5;
                    });
                    if (show) {
                        $('minsel').show();
                    }
                });
            }
        }

        return {
            diarytimepicker: init
        };
    });

})(jQuery);



  ----- Original Message -----
  From: Thiago H de Paula Figueiredo
  To: Tapestry users
  Sent: Tuesday, May 20, 2014 2:02 PM
  Subject: Re: js executes before dom ready?


  On Tue, 20 May 2014 03:40:31 -0300, John <j...@quivinco.com> wrote:

  > Hi,

  Hi!

  > I'm finding that a js component that manipulates the dom during
  > initialisation behaves irratically. I'm wondering if the tapestry
  > initiialising in the js executes before the dom is fully ready?

  No, that's not correct. Is this erratic code dealing with HTML elements  
  created by other JS code?

  > Are there any tips for making sure js executes when the page is ready?

  Just call your JS code using JavaScriptSupport methods.

  --
  Thiago H. de Paula Figueiredo
  Tapestry, Java and Hibernate consultant and developer
  http://machina.com.br

  ---------------------------------------------------------------------
  To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
  For additional commands, e-mail: users-h...@tapestry.apache.org


---
This email is free from viruses and malware because avast! Antivirus protection 
is active.
http://www.avast.com

Reply via email to