Javascript alert()取代之前的代码

时间:2017-01-30 12:32:32

标签: javascript jquery

我有一个提交按钮的联系表格。一旦从处理提交数据的服务器端PHP收到响应,我正在使用JQuery按以下顺序执行以下操作:

  1. 将按钮文字更改为"发送"
  2. 在警报中显示收到的回复
  3. 代码很简单:

    submit_button.text('Send');
    alert(response);
    

    但是,无论如何,alert()似乎始终在文本更改之前触发。这是设计的吗?改变序列的任何技巧?我需要按钮的文字才能在显示提醒之前更改。我甚至徒劳地尝试了下面的事情:

    submit_button.text('Send');
    if(submit_button.text() == 'Send') { alert(response); }
    

    对不起,如果这个问题已经在其他地方得到解答,请求你指出我的方向是正确的。

4 个答案:

答案 0 :(得分:8)

您可以将alert电话打包到setTimeout来电,这将在事件循环结束时调用alert,并为浏览器提供更新DOM的时间第一

submit_button.text('Send');
setTimeout(function () { alert(response); }, 1);

FIDDLE: https://jsfiddle.net/sn9cbqz3/3/

答案 1 :(得分:6)

问题是脚本继续运行而没有给DOM更新时间。您可以使用setTimeout来实现您的目标:

submit_button.text('Send');
setTimeout(function(){
      alert(response);
},10);

答案 2 :(得分:4)

我认为这可以通过setTimeout解决,以允许浏览器在触发警报之前完成线程和重绘,就像这样...

submit_button.text('Send');
setTimeout(function() {alert(response);},0);

答案 3 :(得分:0)

作为Javascript alert box shows up before executing previous statement

中的受访者
  

只要您的Javascript代码正在运行,浏览器中的更改就不会显示。

     

浏览器是事件驱动的,因此更改DOM中的元素不会立即显示更改,而是触发事件以重绘元素。当您的功能运行完毕后,浏览器将处理任何待处理事件并显示更改。

     

因此,在构建应用程序时,您必须使用相同的方法,以便浏览器有机会显示更改。   By Guffa

超时建议几乎是你最好的选择。

submit_button.text('Send');
setTimeout(function () { alert(response); }, 1);

建议Rik Lewis