Ah, I have misread it then; I was under the impression the calls to
the function were on the external page, but the functions themselves
were on separate pages.
Thanks for clearing that up.

On Feb 9, 9:47 am, Ricardo Tomasi <ricardob...@gmail.com> wrote:
> I think the issue is that all of the functions are declared on the
> same external JS file. So you can't check for the function itself, as
> it will always exist, you need to check for some condition in the
> page. All of this will be inside $(document).ready on the external
> file.
>
> There are many other possibilities, a <meta> tag, using the title or
> any other text/element on the page. The choice boils down to how the
> whole site/app is structured and development practices in use.
>
> cheers,
> - ricardo
>
> On Feb 9, 3:29 pm, mkmanning <michaell...@gmail.com> wrote:
>
> > @Nicolas - I'm curious as to why you find Ricardo's easiest?
>
> > Ricardo's first solution would work, but to my mind adds extra
> > complexity. You're adding a dependency on the presence of elements in
> > the markup to execute your functions. If you work, as I currently do,
> > in a multi-developer environment, it's very easy for someone to change
> > the id of the element you're using, or perhaps remove it completely,
> > which would immediately stop the functions from being called. They
> > could also add that element to a page using a different identifier,
> > and now that page would match two of Ricardo's if statements, calling
> > functions that won't exist and so you're back to the original issue.
> > This latter condition means you have to make sure you have a unique
> > identifier element for every page, or follow Ricardo's second
> > suggestion and use a unique class on the body tag of every page. One
> > thing not apparent in his example is that the user may want multiple
> > functions to run on each page, for example:
>
> > page 1: functions 1,2,& 4
> > page 2: functions 3,4 & 6
> > etc.
>
> > This increases the complexity of the if statements and which functions
> > go where, and seems more likely to break over time as functions get
> > added or removed.
>
> > My suggestion of just keeping an array of functions in one location
> > (the external js), and checking for the presence of the function on
> > domready and executing it if found, rather than a 'middle-man' element
> > that has to stand in for one or more functions, seems much more
> > direct--to me at least :)
>
> > Maybe I'm missing something that makes Ricardo's seem to be easiest?
>
> > On Feb 9, 2:26 am, Nicolas R <ruda...@googlemail.com> wrote:
>
> > > I not sure if this suits you, but you could split your functions to
> > > separate files and then lazy load each js file as necessary.
> > > In such casehttp://nicolas.rudas.info/jQuery/getPlugin/maybe
> > > helpful
>
> > > Otherwise I find Ricardo's suggestion the easiest. You could also do
> > > some time tests to check whethercallingthese functions when not
> > > really needed effects performance, and act accordingly
>
> > > On Feb 9, 3:33 am, mkmanning <michaell...@gmail.com> wrote:
>
> > > > *Tab+spacebar and it posts :P
>
> > > > You could put your list of functions in an array in your external js,
> > > > then call them on the window object in a loop:
> > > > $(function() {
> > > >         var funcs = [
> > > >         'ManageCategoriesClick',
> > > >         'HideByDefault',
> > > >         'PrepareSplitForm',
> > > >         'SetUpAdvertPopup',
> > > >         'CheckAll',
> > > >         'CheckNone',
> > > >         'EditCategoryInPlace',
> > > >         'PreparePaneLinks',
> > > >         'PrepareToolTips'
> > > >         ]
>
> > > >         $.each(funcs,function(i,f){
> > > >                 if(typeof(window[f]) == 'function'){
> > > >                         window[f]();
> > > >                 }
> > > >         });
> > > >  });
>
> > > > On Feb 8, 5:21 am, Beau <zar...@gmail.com> wrote:
>
> > > > > Thanks for the ideas everyone!
>
> > > > > @Stephan: Yes, it's in an external JS file. I'd prefer to not have to
> > > > > do any inline javascript. I've considered it, but thanks for the
> > > > > suggestion!
>
> > > > > @Ricardo: Thanks for those. I may end up doing a variation of them.
>
> > > > > On Feb 8, 4:50 am, Stephan Veigl <stephan.ve...@gmail.com> wrote:
>
> > > > > > Hi
>
> > > > > > I guess you have your $().ready()functionin an external js file,
> > > > > > otherwise you could
> > > > > > customize it for the according html page.
>
> > > > > > Another construct similar to Ricardos one, but a bit more flexible:
>
> > > > > > Use a global variable in every html file to specify the init 
> > > > > > functions
> > > > > > you want to call for this page:
> > > > > > <script type="text/javascript">
> > > > > >         myInitFxn = [ManageCategoriesClick, HideByDefault, 
> > > > > > PrepareSplitForm,...];
> > > > > > </script>
>
> > > > > > ready.js:
> > > > > > $().ready(function(){
> > > > > >         for(var i in myInitFxn) {
> > > > > >                 myInitFxn[i](); // call initfunction
> > > > > >         }
>
> > > > > > });
>
> > > > > > by(e)
> > > > > > Stephan
>
> > > > > > 2009/2/8 brian <bally.z...@gmail.com>:
>
> > > > > > > On Sat, Feb 7, 2009 at 11:21 PM, Ricardo Tomasi 
> > > > > > > <ricardob...@gmail.com> wrote:
>
> > > > > > >> Alternatively you could add a different class to the body of each
> > > > > > >> page, then use this rather amusing construct:
>
> > > > > > >> $(document).ready((function(){
> > > > > > >>  var is =function(v){ return 
> > > > > > >> ++document.body.className.indexOf(v) };
>
> > > > > > >>  return(
> > > > > > >>   is('categories')
> > > > > > >>     ? ManageCategoriesClick :
> > > > > > >>   is('hidebydefault')
> > > > > > >>     ? HideByDefault :
> > > > > > >>   is('form')
> > > > > > >>     ? PrepareSplitForm :
> > > > > > >>   is('advert')
> > > > > > >>     ? SetUpAdvertPopup :
> > > > > > >>  function(){} //nothing
> > > > > > >>  );
>
> > > > > > >> })());
>
> > > > > > > That is, indeed, amusing. And one for my toy chest. Thanks!
>
> > > > > > > Who knew, back in '96, that javascript was going to turn out to 
> > > > > > > be so much fun?

Reply via email to