V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Plumes
V2EX  ›  JavaScript

JS新手求助一个诡异的问题

  •  
  •   Plumes · 2013-05-23 00:25:08 +08:00 · 3816 次点击
    这是一个创建于 4214 天前的主题,其中的信息可能已经有所发展或是发生改变。
    for(i=0;i<window.frames["main"].document.forms[0].elements.length;i=i+4)
    {
    window.frames["main"].document.forms[0].elements[i].checked=true;
    }
    window.frames["main"].document.forms[0].submit();
    window.frames["main"].location.href="list_wj.jsp";

    这是我的代码,功能是填写“main” iframe 里的一个表格,然后执行submit函数提交,接着使iframe跳转回list_wj.jsp,为什么在Chrome的console里执行的时候,会跳过执行submit提交,直接跳转呢?
    21 条回复    1970-01-01 08:00:00 +08:00
    ForgotFun
        1
    ForgotFun  
       2013-05-23 00:31:46 +08:00   ❤️ 1
    你的FROM的信息应该不全,可能缺少URL或者METHOD
    Plumes
        2
    Plumes  
    OP
       2013-05-23 00:42:46 +08:00
    @ForgotFun 但是,把location那句去掉后是能够正常提交的
    ForgotFun
        3
    ForgotFun  
       2013-05-23 00:44:19 +08:00
    @Plumes 可能chrome的js代码异步执行了,没有等submit返回就执行了下一步代码.
    ForgotFun
        4
    ForgotFun  
       2013-05-23 00:45:11 +08:00
    @Plumes 你的跳转代码可以写在表单的CGI里.
    ForgotFun
        5
    ForgotFun  
       2013-05-23 00:47:01 +08:00
    dntc
        6
    dntc  
       2013-05-23 01:00:21 +08:00
    window.frames["main"].document.forms[0].submit();
    执行后会立即执行
    window.frames["main"].location.href="list_wj.jsp";
    进行跳转.
    并不会等待 submit 完了后才跳转
    jasya
        7
    jasya  
       2013-05-23 01:02:01 +08:00   ❤️ 1
    @Plumes submit会向你所请求的界面发送数据,所以有location.href,可能你的submit的数据和请求页面的工作并没有完成,所以说不是跳过submit而且没完成
    jasya
        8
    jasya  
       2013-05-23 01:03:42 +08:00
    这种请求你最好用ajax一个同步请求,在完成请求后在执行location.href
    Plumes
        9
    Plumes  
    OP
       2013-05-23 11:13:33 +08:00
    @jasya 假如我现在想在iframe中载入编号为page_0,page_1....page_i这样一系列的网页,并在每个网页打开后用alert弹出 i,这样该怎么做呢?我尝试了包括回调函数,settimeout等好多种方法,结果都还是页面不跳转,依次弹出 i,然后直接跳转到最后一个网页
    jasya
        10
    jasya  
       2013-05-23 11:22:01 +08:00
    iframe元素一样的有onload事件

    iframe[0].onload = function(){alert(this.id)}
    Plumes
        11
    Plumes  
    OP
       2013-05-23 11:31:24 +08:00
    @jasya
    for(k=4;k<=6;k++){
    window.frames["main"].location.href="http://example.com/pg.jsp?wj_num="+k;
    window.frames["main"].onload=alert(k);
    }
    这是我的代码,依然是在当前页面依次弹出4,5,6,然后直接跳转到page6
    jasya
        12
    jasya  
       2013-05-23 11:59:00 +08:00
    for(k = 4; k<=6;k++){
    window.frames["main"].document.forms[k].url = "http://example.com/pg.jsp?wj_num="+k;
    window.frames["main"].document.forms[k].onload = function(){alert(k)};
    }
    jasya
        13
    jasya  
       2013-05-23 12:01:46 +08:00
    @jasya 第二行不是url..汗
    是src

    window.frames["main"].document.forms[k].src= "http://example.com/pg.jsp?wj_num="+k;
    Plumes
        14
    Plumes  
    OP
       2013-05-23 12:32:16 +08:00
    @jasya 还是不行,汗,效果还是一样的不
    jasya
        15
    jasya  
       2013-05-23 12:38:18 +08:00
    @Plumes 你是要在一个iframe中载入网页还是有多个iframe?
    Plumes
        16
    Plumes  
    OP
       2013-05-23 12:49:03 +08:00
    @jasya 就是同一个frame中依次载入一系列网页,大概流程就是载入一个网页,处理该网页,处理完毕后,载入下一个网页
    thursday
        17
    thursday  
       2013-05-23 13:09:03 +08:00
    是不是跨域了。。同源策略导致的不能 操作 其他域名下的iframe页面
    jasya
        18
    jasya  
       2013-05-23 13:13:25 +08:00
    @Plumes https://gist.github.com/jasya/5632884 你看下这个,应该和你说的意思一样

    如@thursday 所说如果你要操作不同域iframe页面下的元素是不行
    ijse
        19
    ijse  
       2013-05-24 09:18:56 +08:00
    晕,, 程序写成这样。。。

    您 多定义几个变量不费钱。。
    Plumes
        20
    Plumes  
    OP
       2013-05-24 11:55:13 +08:00
    最后的解决办法是在原始页面append若干iframe,把这一系列的网页同时载入,待载入完毕后,再执行其他代码
    ChanceDoor
        21
    ChanceDoor  
       2013-05-24 13:35:57 +08:00
    提交完成返回一个值 用interval 检查到提交完成后clearInterval 再跳转
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3589 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:30 · PVG 12:30 · LAX 20:30 · JFK 23:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.