Far more likely is that the script isn't as unobtrusive as it should be and some part of the script that is exposed unnecessarily is clashing with other content in the page. Where this is the case the simplest solution is to rewrite the script properly. After all, an unobtrusive script is far easier to maintain than one that has pieces scattered everywhere and/or has parts of the script exposed where they can interfere with and be interfered with by other scripts.
With the event processing taken care of the only other thing that can cause script clashes is the variables and functions that the various scripts use. Any that are globally defined can potentially clash with other scripts in the page. So all of the variables and functions need to be made local to the specific script. The only exception that is worth making (even though it increases the possibility of script clashes) is where you are going to use a script library to provide some functionality and where that functionality might need to be shared between the scripts within the page. Then you might have one variable defined globally that provides access to that library (for example the jQuery library only has one global variable called jQuery() that is exposed globally - and can optionally have $() exposed as an alias).
The first step in making sure all of your variables and functions are local to your script is to wrap your entire script inside an anonymous function. You do this by adding the following two lines to your script - the first line to the top of your script and the second line to the bottom.
// your script goes here
The second step in making sure that all of your variables are locally defined is to replace all of the var references inside of each function (including the anonymous one you just added) with a single var statement immediately at the start of the function. Every variable name used in the function should be included in that var statement as a comma separated list. All variables defined inside a function exist from when the function starts until it finishes and so defining all of the variables first makes it clearer what the scope of those variables is.
With the above changes applied to ALL your scripts you will have removed almost all of the possibilities for the scripts to be able to clash with one another. The only reasons that will then exist for the script not working when added to the very bottom of your web page will be that you forgot to actually add the script or that the ids that the script requires are not in that web page or you have two scripts that are both trying to interact with the same id in incompatible ways. The first two of these three possibilities can be easily fixed by adding the missing elements to the page. The last of these is the only one that can't be fixed since in that one remaining instance where you have a script clash is because of an actual incompatibility between what the two scripts do (the equivalent of trying to drive your car forwards and backwards at the same time). The only thing that makes sense in that situation is to remove one of the two scripts from the page.
This article written by Stephen Chapman, Felgall Pty Ltd.