我跟了一下你的程序.由于IP53,port等数组变量都没有定义,所以不能做完全的测试....
但是..if (roomid.toLowerCase().charAt(0) == 't'){
for (i=0;i<port.length;i++){
if (roomid.substr(1)==port[i]){
这几句应该没有问题 . . . .
后来我再仔细分析了一下你的代码,发现了问题所在....
就是i 的定义的问题...
你在 for(i = 0 ; i < port.length;i++)里定义了一个i 变量...
然后在(i=0;i<IP40.length;i++)里引用了这个变量...
当你执行完这个循环后,i 就变成了IP40.length-1了...
所以....这应该是个比较大的问题...
你应该形成一个良好的习惯:
for(var i = 0 ; i < port.length;i++)
for(var n = 0 ; n < IP40.length ; n ++)你修改试试看 , 因为我这里没有定义port等的数组,所以只能你自己测试一下看看....
但是..if (roomid.toLowerCase().charAt(0) == 't'){
for (i=0;i<port.length;i++){
if (roomid.substr(1)==port[i]){
这几句应该没有问题 . . . .
后来我再仔细分析了一下你的代码,发现了问题所在....
就是i 的定义的问题...
你在 for(i = 0 ; i < port.length;i++)里定义了一个i 变量...
然后在(i=0;i<IP40.length;i++)里引用了这个变量...
当你执行完这个循环后,i 就变成了IP40.length-1了...
所以....这应该是个比较大的问题...
你应该形成一个良好的习惯:
for(var i = 0 ; i < port.length;i++)
for(var n = 0 ; n < IP40.length ; n ++)你修改试试看 , 因为我这里没有定义port等的数组,所以只能你自己测试一下看看....
var tempstr = str.replace(\t\i,"");
我随便把那几个数组的其中几个元素列出来
var IP40 =[1768,3010,4004]
var IP49 =[1910,1911,4038]
var IP53 =[4240,4244,4245]
var IP54 =[4001,4002,4003]
var IP66 =[3017,4055,4058]
var IP89 =[1901,1915,1916]
var port=IP40.concat(IP49,IP54,IP66,IP89) 程序看起来没有错误。。
例如表单输入的是t1768。。程序运行到
if (roomid.toLowerCase().charAt(0) == 't'){
for (i=0;i<port.length;i++){
的时候。并不和数组里面的元素对应。所以直接执行
else {
if (roomid.substr(1)<4069)roomip ="202.96.140.54"
else if(roomid.substr(1)<4600)roomip ="202.96.140.66"
else roomip ="202.96.140.40"
。
那部分了。。
<script language="JavaScript">
<!--
var IP40 =[1768,3010,4004]
var IP49 =[1910,1911,4038]
var IP53 =[4240,4244,4245]
var IP54 =[4001,4002,4003]
var IP66 =[3017,4055,4058]
var IP89 =[1901,1915,1916]
var port=IP40.concat(IP49,IP54,IP66,IP89)
var roomid = 't1768'
if (roomid.toLowerCase().charAt(0) == 't'){
for (i=0;i<port.length;i++){
if (roomid.substr(1)==port[i])
alert(roomid.substr(1)==port[i])
}
}
//-->
</script>
-
另外,后面的循环变量是应该改一下
我用roomid=t4444调试你的程序时 , 把
if (is_digit(roomid))
return 0;
改成了
if (!roomid)
return 0;
然后调试的结果是进入了if (roomid.toLowerCase().charAt(0) == 't')这个
循环......今天比较忙,所以没有再替你调试 . . .
不过我觉的一个问题是你的变量设置一定要改一下 . . .
第二个就是你的is_digit函数有没有问题????会不会已经改变了roomid的值???你的参数名字最好不要用roomid,而是用一个和传入参数名不同的名字,比如num之类的..建议:根据你自己调试结果t1768,直接跳过判断语句,那么应该是is_digit改变了roomid的值..
因为假如你传入的参数是t1768的话 ,
if (is_digit(roomid))
return 0;
else if (roomid.toString().search(":") != -1)
return 1;
else if (roomid.toLowerCase().charAt(0) == 't')
这几句只有is_digit可能会改变roomid的值 , 而如果is_digit没有改变roomid的值的话,那么
肯定是会进入if (roomid.toLowerCase().charAt(0) == 't')里...if (roomid.toLowerCase().charAt(0) == 't')这一句经测试是没有任何问题的....你的问题在于对于变量的用法上有误 , javascript的变量是不需要声明的,所以可以在程序任何地方调用 , 你如果要在is_digit里判断是否为数字的话,最好写成:
function is_digit(num)
{
var MyRoomId = num ;
//下面为判断的代码...
}
把下面的语句
else if (roomid.toLowerCase().charAt(0) == 't'){
for (i=0;i<port.length;i++){
if (roomid.substr(1)==port[i]){
for (i=0;i<IP40.length;i++)roomip = "202.96.140.40"
for (i=0;i<IP49.length;i++)roomip = "202.96.140.49"
for (i=0;i<IP53.length;i++)roomip = "202.96.140.53"
for (i=0;i<IP54.length;i++)roomip = "202.96.140.54"
for (i=0;i<IP66.length;i++)roomip = "202.96.140.66"
for (i=0;i<IP89.length;i++)roomip = "202.96.140.89"
}else {if (roomid.substr(1)<4069)roomip ="202.96.140.54"
else if(roomid.substr(1)<4600)roomip ="202.96.140.66"
else roomip ="202.96.140.40"
break
}
★★改成:★★
else
{
alert(roomid);
}
整套程序如下,数组比较长,只列前3个~function is_digit(str)
{
var digitstr = "0123456789";
for(var i=0;i<str.length;i++)
if (digitstr.indexOf(str.charAt(i)) == -1)
return false;
return true;
}var IP40 =[1768,3010,4004]
var IP49 =[1910,1911,4038]
var IP53 =[4240,4244,4245]
var IP54 =[4001,4002,4003]
var IP66 =[3017,4055,4058]
var IP89 =[1901,1915,1916]
var port=IP40.concat(IP49,IP54,IP66,IP89)
function get_room_type(roomid)
{
if (is_digit(roomid))
return 0;
else if (roomid.toLowerCase().charAt(0) == 't'){
for (i=0;i<port.length;i++){
if (roomid.substr(1)==port[i]){
for (j=0;j<IP40.length;j++)roomip = "202.96.140.40"
for (k=0;k<IP49.length;k++)roomip = "202.96.140.49"
for (l=0;l<IP53.length;l++)roomip = "202.96.140.53"
for (x=0;x<IP54.length;x++)roomip = "202.96.140.54"
for (c=0;c<IP66.length;c++)roomip = "202.96.140.66"
for (v=0;v<IP89.length;v++)roomip = "202.96.140.89"
}else {if (roomid.substr(1)<4069)roomip ="202.96.140.54"
else if(roomid.substr(1)<4600)roomip ="202.96.140.66"
else roomip ="202.96.140.40"
break
//alert(roomid);
//break
}
}return 1;
}
else if ((roomid.toString().toLowerCase().search(".js") != -1))
return 2;
else
return -1;
}function gotoroom(roomid,auser,apass) { var roomurl; switch (get_room_type(roomid))
{
case 0:
roomurl="http://202.96.140.86/cgi-bin/login.cgi?roomid=" + roomid + "&USER="+auser+"&PASS="+apass;
break;
case 1:
roomurl = "http://"+roomip+":"+roomid.substr(1)+"/?USER="+auser+"&PASS="+apass;
break; case 2:
roomurl="http://www.js.bliao.com/login.php?roomid=" + roomid.toLowerCase().replace(".js","") + "&USER="+auser+"&PASS="+apass;
break;
default:
return;
break;
} window.open(roomurl,"_blank","top=10,left=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=790,height=530");
}其实我就是想知道怎么在执行else if (roomid.toLowerCase().charAt(0) == 't'){
for (i=0;i<port.length;i++){
的时候
不但能判断出表单的数据是有t的,而且能取消这个t和数组进行比较,
当然可能还有一个办法就是把数组的每个元素都加上一个t。但那样太麻烦了,也不是我所希望的。。
第一: 判断是否为数字一个正则表达式就可以了 ,不需要那么一大段代码 . .
第二: 这几句写的尤其烂,不知道怎么会这么写??
if (roomid.substr(1)==port[i]){
for (j=0;j<IP40.length;j++)roomip = "202.96.140.40"//此处循环3次来做赋同样的值??
for (k=0;k<IP49.length;k++)roomip = "202.96.140.49"
for (l=0;l<IP53.length;l++)roomip = "202.96.140.53"
for (x=0;x<IP54.length;x++)roomip = "202.96.140.54"
for (c=0;c<IP66.length;c++)roomip = "202.96.140.66"
for (v=0;v<IP89.length;v++)roomip = "202.96.140.89"
//★★此处应该加上break★★
}else {
这几句里 , 循环了n次来做同一个操作就是给roomip赋值 . . .
最后赋值的结果都是203.96.140.89 .....
另外,这也是你问题关键所在...★★★★ 你忘了加 break .★★★★
你传入了t1768值,i = 0 ;时,你跟port[0]做比较,此时roomid = t1768 , port[0] = 1768,此时会进入 if (roomid.substr(1)==port[i]){}里...但是接着i+1,又开始循环一次..
此时i= 1; port[1] = 3010 ; 你if (roomid.substr(1)==port[i])相比较当然会不对...
然后接着循环,一直最后,i = 14 ,port[14] = 1916 此时你做比较时,然后就会进入else里面...总之,这段代码错误多多 , 你需要好好反省一下 . . .