带回调的Javascript排序

带回调的Javascript排序,javascript,callback,usability,Javascript,Callback,Usability,我有几个链接用于对页面上的当前元素进行排序 职能: 带有数组排序的单击处理程序 B-根据排序的数组显示元素 排序甚至需要2秒钟,所以我想向用户显示一些反馈 我想把链接文本改成“进行中…”之类的东西 有趣的是,A存储旧链接文本并将其更改为“进行中”,然后将另一个函数传递给B 我在显示元素之后调用它来显示链接的旧文本,但它就是不起作用 在调试器中,链接文本已更改,但我始终只能看到旧文本 如何为此创建有效的回调 我看到类似的排序网站,也没有任何反馈给用户 这可以用javascript实现吗?或者反

我有几个链接用于对页面上的当前元素进行排序

职能:

  • 带有数组排序的单击处理程序
  • B-根据排序的数组显示元素
排序甚至需要2秒钟,所以我想向用户显示一些反馈

我想把链接文本改成“进行中…”之类的东西

有趣的是,A存储旧链接文本并将其更改为“进行中”,然后将另一个函数传递给B 我在显示元素之后调用它来显示链接的旧文本,但它就是不起作用

在调试器中,链接文本已更改,但我始终只能看到旧文本

如何为此创建有效的回调

我看到类似的排序网站,也没有任何反馈给用户


这可以用javascript实现吗?或者反馈只能在ajax请求时显示?

问题很可能是您正在运行完全同步的代码

在启动的任何函数完成之前,DOM都不会更新(即使在长时间运行的计算之前更新了DOM)

防止DOM立即更新的长时间运行的计算。(单击顶部的“渲染”按钮以正确查看示例。)

请注意,在示例中,
“开始…等待几秒钟。”
文本立即出现,并且不会被长时间运行的计算阻止。但是
“更新的”
文本需要3秒钟才能显示

这是因为我首先将
“start…”
添加到DOM中,然后将其余代码包装到
setTimeout
中。这允许DOM立即更新
“启动…”
,但
setTimeout
中的其余代码是同步的,因此在该代码完成之前,DOM不会再次更新


因此,您的解决方案可以是使用
“进行中…”
更新文本,然后将其余代码包装在
setTimeout()
中,以便允许DOM立即使用您的进度消息进行更新

element.innerHTML = "In progress...";

setTimeout( function() {
    // invoke the sorting code
}, 0);

问题很可能是您正在运行完全同步的代码

在启动的任何函数完成之前,DOM都不会更新(即使在长时间运行的计算之前更新了DOM)

防止DOM立即更新的长时间运行的计算。(单击顶部的“渲染”按钮以正确查看示例。)

请注意,在示例中,
“开始…等待几秒钟。”
文本立即出现,并且不会被长时间运行的计算阻止。但是
“更新的”
文本需要3秒钟才能显示

这是因为我首先将
“start…”
添加到DOM中,然后将其余代码包装到
setTimeout
中。这允许DOM立即更新
“启动…”
,但
setTimeout
中的其余代码是同步的,因此在该代码完成之前,DOM不会再次更新


因此,您的解决方案可以是使用
“进行中…”
更新文本,然后将其余代码包装在
setTimeout()
中,以便允许DOM立即使用您的进度消息进行更新

element.innerHTML = "In progress...";

setTimeout( function() {
    // invoke the sorting code
}, 0);

嗯。。。如果您在开始排序之前更改了链接文本,那么这应该是可行的。你能发布一些代码片段吗?嗯。。。如果您在开始排序之前更改了链接文本,那么这应该是可行的。你能发布一些代码片段吗?