我跟了一下你的程序.由于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等的数组,所以只能你自己测试一下看看....

解决方案 »

  1.   

    str = 字符串;
    var tempstr = str.replace(\t\i,"");
      

  2.   

    谢谢楼上的朋友们,但你们的办法不行啊
    我随便把那几个数组的其中几个元素列出来
    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"

    那部分了。。
      

  3.   

    问题应该是在其它地方
    <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>
    -
    另外,后面的循环变量是应该改一下
      

  4.   

    你看看if (is_digit(roomid))是不是错了...
    我用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 ;
       //下面为判断的代码...
    }
      

  5.   

    还是用个简单的方法来判断吧 ..
    把下面的语句
    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);
    }
      

  6.   

    ricky460(阿酷) alert的值里面有t啊我把整套程序简单的贴出来哦~`奇怪就是不执行前面的。我想了半天大概是因为程序得到的值是t1768 而不是1768 所以程序和数组port比较的时候全部不对,就执行了else部分了吧
    整套程序如下,数组比较长,只列前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。但那样太麻烦了,也不是我所希望的。。
      

  7.   

    你写的代码实在是不敢恭维
    第一: 判断是否为数字一个正则表达式就可以了 ,不需要那么一大段代码 . . 
    第二: 这几句写的尤其烂,不知道怎么会这么写??
    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里面...总之,这段代码错误多多 , 你需要好好反省一下  . . .