怎样将一个函数的参数传递到它内部的函数.例如:function d(direct,demo,demo1,demo2){
//还应该添加什么代码?
var v1Scroll = setInterval("Marquee(x,y,z,w)",speed);}
d(1,2,3,4);
//还应该添加什么代码?
var v1Scroll = setInterval("Marquee(x,y,z,w)",speed);}
d(1,2,3,4);
调试欢乐多
所以你可以直接用:
function d(direct,demo,demo1,demo2){var v1Scroll = setInterval("Marquee(direct,demo,demo1,demo2)",speed);
}
d(1,2,3,4);例:
<input type="text" value="请输入圆的半径" id="banjing" onfocus="this.value='';"><input type="button" value="计算周长和面积" onclick="cal(document.getElementById('banjing').value)">
<script>
function cal(r){
alert('周长:'+zhouchang(r));//调用function zhouchang()
alert('面积:'+mianji(r)); //调用function mianji()
}function zhouchang(r){
return(3.14*2*r);
}function mianji(r){
return(3.14*r*r);
}
</script>如果你不想用一样的参数变量名,可以在你注释的地方加上变量定义和赋值语句:
function d(direct,demo,demo1,demo2){
var x=direct;
var y=demo;
var z=demo1;
var w=demo2;
var v1Scroll = setInterval("Marquee(x,y,z,w)",speed);
}
d(1,2,3,4);
function d(direct,demo,demo1,demo2){
function showD(){
alert(direct+","+demo+","+demo1+","+demo2);
}
showD();}
window.onload=function(){
d(1,2,3,4);//输出1,2,3,4
}
</script>
<head>
<title>左右滚动的图片效果 - 51windows.Net</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script type="text/javascript">
var speed=50
demo2.innerHTML=demo1.innerHTMLfunction d(direct,demo,demo1,demo2){
var v1Scroll = setInterval("Marquee(direct,demo,demo1,demo2)",speed);
demo1.onmouseover=function() {clearInterval(v1Scroll)}
demo1.onmouseout=function() {v1Scroll=setInterval("Marquee(direct,demo,demo1,demo2)",speed)}function Marquee(direct,MainId,contentId,copyId){
var objMain = document.getElementById(MainId);
var objContent = document.getElementById(contentId);
var objCopy = document.getElementById(copyId);
var mainWidth = objMain.offsetWidth
var contentWidth = objContent.offsetWidth
var copyWidth = objCopy.offsetWidth;
var mainHeight = objMain.offsetHeight;
var contentHeight = objContent.offsetHeight;
var copyHeight = objCopy.offsetHeight;
if (direct=="LEFT"){
if (copyWidth-objMain.scrollLeft<=0){
objMain.scrollLeft-=contentWidth;
}else{
objMain.scrollLeft+=2;
}
}else if (direct=="RIGHT"){
if (copyWidth-mainWidth-objMain.scrollLeft>=0){
objMain.scrollLeft=contentWidth + copyWidth - mainWidth;
}else{
objMain.scrollLeft-=2;
}
}else if (direct=="UP"){
if (copyHeight-objMain.scrollTop<=0){
objMain.scrollTop-=contentHeight;
}else{
objMain.scrollTop+=2;
}
}else if (direct=="DOWN"){
if (copyHeight-mainHeight-objMain.scrollTop>=0){
objMain.scrollTop=contentHeight + copyHeight - mainHeight;
}else{
objMain.scrollTop-=2;
}
}
}
}
d('UP','demo','demo1','demo2')
</script>我想把脚本的代码封装了但是接口函数写不好
改为:
var v1Scroll = setInterval(Marquee(direct,demo,demo1,demo2),speed);
或者把"Marque(...)"拆分开来用加号串起来,参数变量不能放在引号内。你可以在两个函数第一句加上alert(direct)语句来测试参数传递的效果。
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<div id=demo style=overflow:hidden;height:150;width:120;>
<div id=demo1><img height="4"><img src="http://www.csdn.net/Images/logo_csdn.gif">
<img src="http://images.csdn.net/20070306/API120[1].60.gif">
<img src="http://zi.csdn.net/intel_120x60.gif">
<img src="http://community.csdn.net/logo/images/prj.210.67.gif">
</div>
<div id=demo2></div>
</div><script>
var speed=30;
demo2.innerHTML=demo1.innerHTML;function roll(direct,demo,demo1,demo2){
var MyMar=setInterval("Marquee(direct,demo,demo1,demo2)",speed);
demo.onmouseover=function() {clearInterval(MyMar)}
demo.onmouseout=function() {MyMar=setInterval("Marquee(direct,demo,demo1,demo2)",speed)}
}function Marquee(direct,demo,demo1,demo2){
switch (direct)
{
case 'up'://向上滚动
if(demo2.offsetTop-demo.scrollTop<=0)
demo.scrollTop-=demo1.offsetHeight;
else
demo.scrollTop++;
break;
case 'down'://向下滚动
if(demo1.offsetTop-demo.scrollTop>=0)
demo.scrollTop+=demo2.offsetHeight;
else
demo.scrollTop--;
break;
}
}var direct='up';//将方向定义为一个变量,取值为'up'或'down'
roll(direct,demo,demo1,demo2);
//第一个参数用赋值的变量,不要直接用常量(我也不知道为什么,反正这样做把问题解决了)
//demo,demo1,demo2都是对象,不要加引号
</script>
</BODY>
</HTML>
我当初遇到这个问题是通过指定脚本语言解决的...
参考下面这个~
/*******************************************************************
参数说明:
sUrl: 目标URL
sParameter: 需要传递的字符串
bAsynchronous: 传输模式(true为异步,false为同步),默认为true
fnComplete: 传输成功后执行的函数,默认为空函数
*******************************************************************/
function PostResult(sUrl, sPostString, bAsynchronous, fnComplete)
{
//定义参数默认值
if (bAsynchronous != false) bAsynchronous = true;
if (!fnComplete) fnComplete = function fnDefault(){};
var objXMLHttp = CreateXMLHttpObject();
objXMLHttp.open("POST", sUrl, bAsynchronous);
objXMLHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
objXMLHttp.onreadystatechange = CheckPosted;
objXMLHttp.send(sPostString);
function CheckPosted()
{
if(objXMLHttp.readyState == READY_STATE_COMPLETED)
{
if(objXMLHttp.responseText == "ok")
{
fnComplete();
return;
}
else
{
setTimeout("javascript:PostResult(\"" + sUrl + "\", \"" + sPostString + "\", " + bAsynchronous + ", " + fnComplete + ")", 3000);
}
}
}
}
var f = function(){
fn.apply( o, args );
};
return setInterval( f, t );
};function d(){
var v1Scroll = _setInterval( speed, Marquee, arguments );
}
d(1,2,3,4);
=========
以上即可.