如何调用外部调用js文件中的函数数?

&&&&&&&&&&&&&&&&&&
posts - 15,comments - 14,trackbacks - 0
一、JavaScript脚本语言的特性&&&&JavaScript脚本语言是一种面向浏览器的网页脚本编程语言。脚本语言有以下几个特性:1、在客户端执行。完全在用户的计算机上运行,无须经过服务器。2、面向对象。具有内置对象,也可以直接操作浏览器对象。3、动态变化。可以对用户的输入作出反应,也可以直接对用户输出。4、简单易用。JavaScript脚本语言虽然简单,但初学者也能快速掌握。5、只能与HTML语言一起使用。要通过浏览器解释执行。二、如何在HTML中加入JavaScript脚本&&JavaScript采用的格式如下:&Script Language="JavaScript"&JavaScript 语句 &/Script&把上述语句放在HTML的&head&与&/head&之间,也可放在&body&与&/body&之间。例子:在网页上显示“你好!”。&html&&body&&Script Language="JavaScript"&alert("你好!") &/script&&/body&&/html&三、在浏览器地址栏直接执行JavaScript脚本也可以在浏览器的地址栏中输入JavaScript语句,由浏览器直接执行。如输入:javascript:alert(200*75)四、调用JavaScript文件 可以将纯JavaScript的语句另外保存在一个"*.js"的文件中,需要时再调用。例子:调用test.js文件,显示提示。 &html&&body&调用test.js文件&script language="JavaScript" src="test.js"&&/script&&/body&&/html& test.js的文件内容如下: alert("这是被调用的语句。") 五、注释语句用&!- ... -&表示注解部分,用作说明解释,浏览器不显示出来。不要也可以。另外,双斜线 "//" ,是JavaScript 的注释语句,它后面的语句不被执行。六、变量的使用变量的声明:Var usename变量的赋值:usename="李国强"例子:在网页上显示“李国强你好!”。&html&&body&&Script Language="JavaScript"&Var usenameusename="李国强"alert(usename + "你好!") &/script&&/body&&/html&七、数组数组的定义:var name=new Array(5) 用 new 来生成数组。数组的赋值:name[1]="Marry"数组的初始化:var name=new Array("Marry","Petty","Mike","Jphn")数组的引用:name[1]注:数组的第一个素由1开始。八、运算符与表达式1、代数运算符:加(+)、减(-)、乘(*)、除(/)、取余(%)。2、比较运算符:等于(==)、不等于(!=)、大于(&)、小于(&)、大于等于(&=)、小于等于(&=)。3、逻辑运算符:逻辑与(&&)、逻辑或(||)、逻辑非(!)。表达式:由变量和运算符组成的式子。如:usename + "你好!"
阅读(...) 评论()jsp中调用js中的一个函数,函数传参的问题 - 程序员聊聊 - ITeye博客
博客分类:
看本帖只需要你有js基础就可以了!
今天用jsp+servlet+js实现一个删除的功能,结果遇到了一个问题
问题如下:
&&&& onclick="deleteOne(&%=message.getTitleId() %&)"其中&%=message.getTitleId() %&是jsp动态地去取值,不懂得可以将其看成是一个变量;
&&&& function deleteOne(titleId){
var r=confirm("确认删除?");
if(r == true){
document.main.ck_value.value=titleId;
document.main.action="deleteServlet";
document.main.submit();
};
问题是deleteOne函数如果没参数,或者指定成整数,那么deleteOne(注意对应调用,无参的时候调用无参deleteOne,有参数的时候调用有参deleteOne)能正常被调用,但是如果参数不是整数,而是字符串(我们也确实传的是字符串),那么问题就来了,deleteOne函数没被调用
后来我查看编译后的页面源代码,如下
&&& &a href="javascript:void(0)" onclick="deleteOne(OMG80)"&删除&/a&
可以看到deleteOne(OMG80),仔细看,请问deleteOne函数的参数是什么?
是整数吗,显然不是;那么是字符串吗,也不是,字符串需要" "或者' ',所以问题找到,我们读不懂参数类型,机器更读不懂,所以它不知所措,那么理所当然的deleteOne函数没被调用
如何解决了?
&&&&& onclick="deleteOne('&%=message.getTitleId() %&')"加上引号就可以了
最后附上项目源码,有分页、查询、批量操作等功能
&&& 有创建数据库表的语句,但是没有创建数据库,注意自己创建数据库,相应的连接数据库的语句也需要修改,我用的是mysql5.0
(569.1 KB)
下载次数: 10
论坛回复 /
(0 / 2401)
youzhibing
浏览: 29202 次
杀客o凹胖 写道你那个 append还是写在servlet中比 ...
你那个 append还是写在servlet中比较好,直接返回一 ...后使用快捷导航没有帐号?
只需一步,快速开始
查看: 15090|回复: 17
如何动态加载一个JS文件后,能马上运行其中的函数?
UID54452在线时间 小时积分3419帖子离线17387 天注册时间
金牌会员, 积分 3419, 距离下一级还需 1581 积分
看了&&/tech/program/.asp 中的 LoadJS 函数后
//动态加载JS文件
function LoadJS(file){
var head = document.getElementsByTagName('HEAD').item(0);
var script = document.createElement('SCRIPT');
script.src =
script.type = &text/javascript&;
head.appendChild(script);
}
如果LoadJS(function.js)后,确不不能马上运行其中的函数,因为文件不能够立即加载完。
请问用什么办法可以解决?
UID156610在线时间 小时积分652帖子离线17387 天注册时间
高级会员, 积分 652, 距离下一级还需 348 积分
如何动态加载一个JS文件后,能后马上运行其中的函数?
先判断函数是否存在,如果不就5秒后再来一次
UID117525在线时间 小时积分12069帖子离线17387 天注册时间
如何动态加载一个JS文件后,能后马上运行其中的函数?
假设JS文件末尾有个变量叫做dat(var dat='EndLoad'),要执行的函数名为abc()。
function seto()
{if(&undefined&==typeof(dat)){setTimeout(&seto()&,200)
function LoadJS(file){
var head = document.getElementsByTagName('HEAD').item(0);
var script = document.createElement('SCRIPT');
script.src =
script.type = &text/javascript&;
head.appendChild(script);
LoadJS(&function.js&)
UID54452在线时间 小时积分3419帖子离线17387 天注册时间
金牌会员, 积分 3419, 距离下一级还需 1581 积分
如何动态加载一个JS文件后,能后马上运行其中的函数?
好的,谢谢,我试试楼上的思路;
现在我的程序是这样写的,是看了http://www.yeat.org/blog/blogview.asp?logID=241的思路...
但是不知道为什么不行.
&html&
&head&
&/head&
&body&
&/body&
&script&
//-------这一部分是用的别人的代码,越过别看了,后面能证明可用------------------------------
var XMLHttp = {
& & _objPool: [],
& &
& & _getInstance: function ()
& & {
& && &&&for (var i = 0; i & this._objPool. i ++)
& && &&&{
& && && && &if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4)
& && && && &{
& && && && && & return this._objPool[i];
& && && && &}
& && &&&}
& && &&&
& && &&&// IE5中不支持push方法
& && &&&this._objPool[this._objPool.length] = this._createObj();
& && &&&return this._objPool[this._objPool.length - 1];
& & },
& & _createObj: function ()
& & {
& && &&&if (window.XMLHttpRequest)
& && &&&{
& && && && &var objXMLHttp = new XMLHttpRequest();
& && &&&}
& && &&&else
& && &&&{
& && && && &var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
& && && && &for(var n = 0; n & MSXML. n ++)
& && && && &{
& && && && && & try
& && && && && & {
& && && && && && &&&var objXMLHttp = new ActiveXObject(MSXML[n]);& && &&&
& && && && && && &&&
& && && && && & }
& && && && && & catch(e)
& && && && && & {
& && && && && & }
& && && && &}
& && && &}& && && &
& && &&&
& && &&&// mozilla某些版本没有readyState属性
& && &&&if (objXMLHttp.readyState == null)
& && &&&{
& && && && &objXMLHttp.readyState = 0;
& && && && &objXMLHttp.addEventListener(&load&, function ()
& && && && && & {
& && && && && && &&&objXMLHttp.readyState = 4;
& && && && && && &&&
& && && && && && &&&if (typeof objXMLHttp.onreadystatechange == &function&)
& && && && && && &&&{
& && && && && && && && &objXMLHttp.onreadystatechange();
& && && && && && &&&}
& && && && && & },&&false);
& && &&&}
& && &&&return objXMLH
& & },
& &
& & // 发送请求(方法[post,get], 地址, 数据, 回调函数)
& & sendReq: function (method, url, data, callback)
& & {
& && &&&var objXMLHttp = this._getInstance();
& & & & & & & &
& && &&&with(objXMLHttp)
& && &&&{
& && && && &try
& && && && &{
& && && && && & // 加随机数防止缓存
& && && && && & if (url.indexOf(&?&) & 0)
& && && && && & {
& && && && && && &&&url += &&randnum=& + Math.random();
& && && && && & }
& && && && && & else
& && && && && & {
& && && && && && &&&url += &?randnum=& + Math.random();
& && && && && & }
& && && && && & open(method, url, true);
& && && && && &
& && && && && & // 设定请求编码方式
& && && && && & setRequestHeader('Content-Type', 'application/x-www-form- charset=UTF-8');
& && && && && & send(data);
& && && && && & onreadystatechange = function ()
& && && && && & {& && && && && && &
& && && && && && &&&if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304))
& && && && && && &&&{
& && && && && && && && &callback(objXMLHttp);
& && && && && && &&&}
& && && && && & }
& && && && &}
& && && && &catch(e)
& && && && &{
& && && && && & alert(e);
& && && && &}
& && &&&}
& & }
};
//-----------------------这一部分是用的别人的代码---------------------------------------
function getUrlCode(_path){
& & & &
& & & & XMLHttp.sendReq('GET', _path, '', function(ServerObj){
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & code = ServerObj.responseT
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & });
& & & &
};
function Include(_path){
& & & & var id = escape(_path );
& & & & var a = getUrlCode(_path);
& & & & if ((a != null) && (!document.getElementById(id))){
& & & & var head = document.getElementsByTagName(&head&)[0];
& & & & var script = document.createElement(&script&);
& & & & script.language = &javascript&;
& & & & script.type = &text/javascript&;
& & & & script.id =
& & & & script.defer =
& & & & script.text =
& & & & head.appendChild(script);
& & & & }
}
var path = &http://cs02.100steps.net/new/test.js&;
Include(path);
//test();& & & & & & & & & & & & //这句会提示缺少对象
XMLHttp.sendReq('GET', path, '', function(ServerObj){ alert(ServerObj.responseText);}); // 这个XMLhttp应该是可用的,能输出JS的内容
&/script&
&/html&
有条件的在服务器上运行才可以调试...不好意思,麻烦了,有兴趣的话就帮忙看看吧
UID156610在线时间 小时积分652帖子离线17387 天注册时间
高级会员, 积分 652, 距离下一级还需 348 积分
//test();//这句会提示缺少对象
没看到定义test()函数
UID54452在线时间 小时积分3419帖子离线17387 天注册时间
金牌会员, 积分 3419, 距离下一级还需 1581 积分
test() 定义在
3楼的方法我刚刚试了,好像不行,即使变量载入了,也运行了,但是函数没有载入,和 报告的问题一致。
请问 老饕 是不是真的这样做过有效?
UID156610在线时间 小时积分652帖子离线17387 天注册时间
高级会员, 积分 652, 距离下一级还需 348 积分
function seto()
{if(test){test();}else{setTimeout(&seto()&,200);return false}
UID54452在线时间 小时积分3419帖子离线17387 天注册时间
金牌会员, 积分 3419, 距离下一级还需 1581 积分
在浏览器第一次载入的时候不成功,不妨请空缓存一下再试,也会提示 test 未定义。避免第一次以后,再刷新页面,动态加载&&test.js 上面的方法是有效的,但是第一次不行。
UID164225在线时间 小时积分16199帖子离线17387 天注册时间
查看 include 函数:
function JError(){
& & & & this.code& & & & =
& & & & this.reason& & & & =
}
function JObject(){
& & & &
& & & & var self& & & & =
& & & & var errInfo& & & & = new Array();
& & & &
& & & & this.createXMLHttp=function(){
& & & & & & & & try{
& & & & & & & & & & & & return (new ActiveXObject(&MSXML2.XMLHTTP&));
& & & & & & & & }catch(e){
& & & & & & & & & & & & return (new XMLHttpRequest());
& & & & & & & & }
& & & & };
& & & &
& & & & this.createHTMLObj = function(pTag){
& & & & & & & & try{
& & & & & & & & & & & & return document.createElement(pTag.toUpperCase());
& & & & & & & & }catch(e){
& & & & & & & & & & & & var tErr = new JError();
& & & & & & & & & & & & & & & & tErr.code& & & & =
& & & & & & & & & & & & & & & & tErr.reason& & & & = &创建HTML标签时,发生错误&;
& & & & & & & & & & & & errInfo.push(tErr);
& & & & & & & & }
& & & & };
& & & &
& & & & this.include=function(pJSFile){
& & & & & & & & var tXMLHttp = this.createXMLHttp();
& & & & & & & & & & & & tXMLHttp.open(&GET&,pJSFile,false);
& & & & & & & & & & & & tXMLHttp.send(null);
& & & & & & & & var tJsCode& & & & = tXMLHttp.responseT
& & & & & & & & & & & & window.eval(tJsCode,&javascript&);
& & & & & & & & & & & &
& & & & & & & & if (window.execScript){
& & & & & & & & & & & & window.execScript(tJsCode);//ie
& & & & & & & & }else{
& & & & & & & & & & & & window.eval(tJsCode); //firefox
& & & & & & & & }
& & & & };
};
复制代码
UID54452在线时间 小时积分3419帖子离线17387 天注册时间
金牌会员, 积分 3419, 距离下一级还需 1581 积分
谢谢,上面的代码有效,但是这一切的一切还是不太理解.
为什么 open( , , true) + onreadystatechange&&这种形式不行
为什么 open( , , false) 之后直接跟进后续语句就可以?
对于olddig的方法,为什么缓存为空的情况下,第一次载入就会报错,为什么第二次缓存内有了就可以?
window.execScript() 为什么就可以确保全部内容都已载入?
能否深入的揭露一下?
UID156610在线时间 小时积分652帖子离线17387 天注册时间
高级会员, 积分 652, 距离下一级还需 348 积分
dknt在上个帖子中说
谢谢,上面的代码有效,但是这一切的一切还是不太理解.
为什么 open( , , true) + onreadystatechange&&这种形式不行
为什么 open( , , false) 之后直接跟进后续语句就可以?
对于olddig的方法,为什么缓存为空的情况下,第一次载入就会报错,为什么第二次缓存内有了就可以?
window.execScript() 为什么就可以确保全部内容都已载入?
能否深入的揭露一下?
昨天回去研究,发现很可能问题是出在script.src =赋值后可能没有实际触发的执行加载脚本的事件。个人观点,抛砖引玉,欢迎大家一齐来讨论
UID54452在线时间 小时积分3419帖子离线17387 天注册时间
金牌会员, 积分 3419, 距离下一级还需 1581 积分
发现很可能问题是出在script.src =赋值后可能没有实际触发的执行加载脚本的事件。
您说的这个情况我感觉不能说通。
在第一次的访问页面(原始页面)的时候似乎是没有加载,即使等也等不到,只有IE死掉,但是缓存内有了那个JS文件之后,再访问页面(原始页面),就可以加载了,只是一时半会儿不能加载完,用seto()等待是可以达到目的的。这也不能绝对得说是没有实际加载脚本。总之就是感觉比较奇怪。
对于bound0的方法,除了上述的问题存在。我也发现当动态添加一个SCRiPT标签时,JS内普通变量是优先加载的,之后才开始加载其中的函数。所以即使等到&'EndLoad'&,所关注的函数还是没有加载,不能使用。
为什么 open( , , true) + onreadystatechange 这种形式不行
为什么 open( , , false) 之后直接跟进后续语句就可以?
这个我大概知道是为什么了,因为true模式是异步执行,还没轮到onreadystatechange 的执行,下面的需要调用JS内函数的语句就运行了。
换成 false 就可以同步了。要XMLhttpRequest完成之后才能执行继续执行下面的语句。
我一直以来对 true 和 false 的理解都错了。还是我测试的有问题。 乱七八糟的... 有兴趣的朋友自己验证一下吧,我不能保证我实验的准确性。
呼吁大家来讨论~
UID117525在线时间 小时积分12069帖子离线17387 天注册时间
发现当动态添加一个SCRiPT标签时,JS内普通变量是优先加载的,之后才开始加载其中的函数。所以即使等到&'EndLoad'&,所关注的函数还是没有加载,不能使用。
把三楼代码再变通一下。
令dat={EndLoad:1}
function seto()
{if(&undefined&==typeof(dat)||(&undefined&==typeof(dat.Endload)){setTimeout(&seto()&,200)
UID54452在线时间 小时积分3419帖子离线17387 天注册时间
金牌会员, 积分 3419, 距离下一级还需 1581 积分
我觉得这样我就不能不回复了,幸亏我有翻旧帖的好习惯!
半年过去了,回忆了半天才想起来最初是个什么问题。
&这半年来&,一直采用AJAX同步的方式动态加载JS。经实际测试可见这种做法应该是比较成熟的。应该不用讨论循环等待的方式了。
对象载入了函数就肯定载入了?
UID157208在线时间 小时积分27642帖子离线17387 天注册时间
script对象在ff下有onload事件、在ie下有onreadystatechange事件……但是在ie下存在bug!慎用!!!
include_js = (function(){
var uid = 0;
var remove = function(id){
var head = document.getElementsByTagName('head')[0];
head.removeChild( document.getElementById('jsInclude_'+id) );
return function(file,callback){
var id = ++
var head = document.getElementsByTagName('head')[0];
var js = document.createElement('script');
js.setAttribute('type','text/javascript');
js.setAttribute('src',file);
js.setAttribute('id','jsInclude_'+id);
if( document.all )
js.onreadystatechange = function(){
if(/(complete|loaded)/.test(js.readyState)){ callback(id);remove(id);}
js.onload = function(){callback(id); remove(id); };
head.appendChild(js);
include_js(&/home/common.js?t=&,function(){alert(PopPage)});
&提示:您可以先修改部分代码再运行
UID54452在线时间 小时积分3419帖子离线17387 天注册时间
金牌会员, 积分 3419, 距离下一级还需 1581 积分
那你这么写还有bug吗?我说test过的。 另:看你的代码真是一种享受~
UID157208在线时间 小时积分27642帖子离线17387 天注册时间
一般的应用没问题,但如果可能出现多线程的话,暂时还是使用ajax吧……
UID218629在线时间 小时积分2648帖子离线17387 天注册时间
银牌会员, 积分 2648, 距离下一级还需 352 积分
to子乌:ie下存在bug
写个bug的例子出来吧?
Powered by

我要回帖

更多关于 c语言跨文件调用函数 的文章

 

随机推荐