推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
churchmice

问个先后顺序问题

  •  
  •   churchmice · Mar 18, 2018 · 4560 views
    This topic created in 2979 days ago, the information mentioned may be changed or developed.
    事情是这样的,我想用 js 模拟一个商品提交的过程
    商品价格是 1000,可以使用优惠券,比如 100
    人肉流程是我先要点一下优惠券,价格才会变,之后我再去提交这个订单,这样最终只要付 990

    我用 js 的代码如下
    document.xx.click()
    document.xx.submit()

    我可以看到提交之前显示的最终价格是 990,但是提交完了还是扣了 1000

    我想问问大家这是为什么?是不是因为 click 操作需要时间?所以 submit 先触发了?
    19 replies    2018-03-19 18:21:15 +08:00
    lhx2008
        1
    lhx2008  
       Mar 18, 2018 via Android
    可以打印下看看触发没有
    churchmice
        2
    churchmice  
    OP
       Mar 18, 2018 via Android
    @lhx2008 页面上我可以 click 看到触发了,而且价格也发生了变化
    akira
        3
    akira  
       Mar 18, 2018
    click 里面有异步操作?
    hlwjia
        4
    hlwjia  
    PRO
       Mar 18, 2018 via iPhone
    @akira 这种情况,如果不是低级什么拼写错误之类的,肯定是异步的问题
    loading
        5
    loading  
       Mar 18, 2018 via iPhone   ❤️ 1
    js promise 了解一下
    churchmice
        6
    churchmice  
    OP
       Mar 18, 2018 via Android
    @akira 点完就是把优惠的金额从总价格里面去掉了,这种操作应该不需要再向服务器请求吧?
    churchmice
        7
    churchmice  
    OP
       Mar 18, 2018 via Android
    @loading 小白第一次接触 js 啊,今天已经被虐了好久了
    churchmice
        8
    churchmice  
    OP
       Mar 18, 2018 via Android
    @hlwjia 那我这种情况应该怎么搞?用 settimeout 给 click 加点延时,然后再 submit ?
    hlwjia
        9
    hlwjia  
    PRO
       Mar 18, 2018   ❤️ 1
    @churchmice 为了验证是不是异步问题,可以加 timeout,但那个不是解决方案

    @loading 已经说了呀;能用 google,就 google 一下;不能,百度一下也有答案。
    akira
        10
    akira  
       Mar 18, 2018
    @churchmice 如果你们的设计是本地可以直接判断是否使用了优惠券的 然后就发修改后的价格到服务端的话,那基本上就走远了
    bxb100
        11
    bxb100  
       Mar 18, 2018 via Android
    @akira 😂怕是你没见过用页面金额生成订单支付的操作
    hlwjia
        12
    hlwjia  
    PRO
       Mar 18, 2018
    @bxb100 没见过,但是能想像地出来这样的操作应该是挺多的
    ffkjjj
        13
    ffkjjj  
       Mar 19, 2018 via iPhone
    1000 - 100 = 900 :P
    churchmice
        14
    churchmice  
    OP
       Mar 19, 2018 via Android
    @ffkjjj 赞眼力
    churchmice
        15
    churchmice  
    OP
       Mar 19, 2018 via Android
    @hlwjia 刚才试了下,加个 delay 就好了,猜测 click 是个异步事件,没办法多试啊,有成本,哈哈哈哈
    churchmice
        16
    churchmice  
    OP
       Mar 19, 2018 via Android
    @akira click 是调用了一个另外一个 js,做了一些运算,虽然在本地,也可以认为是异步操作对吧?
    yangehappy
        17
    yangehappy  
       Mar 19, 2018
    这点代码。。。真的看不出来什么 多贴点代码吧
    chenyu8674
        18
    chenyu8674  
       Mar 19, 2018
    @churchmice
    如果 click 调用的方法里没有异步行为的话,click 执行过程也会是同步的
    建议上完整代码,尤其是 click 事件
    churchmice
        19
    churchmice  
    OP
       Mar 19, 2018 via Android
    @yangehappy 我不是撸网站的人,没法拿到所有代码啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4256 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 10:11 · PVG 18:11 · LAX 03:11 · JFK 06:11
    ♥ Do have faith in what you're doing.