我有一个提交按钮的联系表格。一旦从处理提交数据的服务器端PHP收到响应,我正在使用JQuery按以下顺序执行以下操作:
代码很简单:
submit_button.text('Send');
alert(response);
但是,无论如何,alert()
似乎始终在文本更改之前触发。这是设计的吗?改变序列的任何技巧?我需要按钮的文字才能在显示提醒之前更改。我甚至徒劳地尝试了下面的事情:
submit_button.text('Send');
if(submit_button.text() == 'Send') { alert(response); }
对不起,如果这个问题已经在其他地方得到解答,请求你指出我的方向是正确的。
答案 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);