js运行时间比较长,怎么才能在它运行之前页面置灰并且有请等待的提示

JavaScript09

js运行时间比较长,怎么才能在它运行之前页面置灰并且有请等待的提示,第1张

看得出来你不太懂 JS,先把代码给你,做了很多注释,先仔细看看,然后后面讲解为什么:

// 检查表单的函数

function checkForm() {

/** @type {string} 数据容器 */

var merArr=""

/** @type {number} 局部循环指针 */

var p=0

/** @type {Array.<Element>} 获取待提交的表单元素 */

var items = document.getElementsByName("add_mer")

// 遮罩

Ext.getBody().mask("数据保存中,请稍等...") //这里没有起作用

// 开始检查

doCheck()

function doCheck(){

/**

 * 循环构造字符串

 * 为了避免长时间阻塞,每一段仅允许循环 100 次

 * 如果一次不能完成,则分组完成

 */

for(var i=0 i<100 && p<items.length i++, p++) {

if (items[x].checked) {

merArr =merArr+Trim(items[x].value)+","

}

}

// 如果循环结束

if (p === items.length) complete()

// 如果循环没有完成,则用 setTimeout 交出控制权,延迟循环

else setTimeout(doCheck, 1)

}

// 检查结束,真正的处理表单

function complete(){

document.getElementById("merArray").value = merArr

if(merArr==""){

alert("请勾选!")

Ext.getBody().unmask()

return false

}

document.forms['listForm'].action = 'addGroupMer.action'

document.forms['listForm'].submit()

}

return false

}

下面是讲解:

1、 JS 是阻塞式的。在一个 JS 函数正在执行的时候,对 DOM 的渲染其实对于用户来说是不可见的。也就是说,你在一个 JS 循环中不论对 DOM 做了什么,用户都是看不到中间过程,只能看到一个最终的结果。

2、 所以,上面代码的核心是,把耗时特别长的操作部分,使用 setTimeout 延迟。 setTimeout 可以把控制权还给浏览器,留出足够的页面渲染时间。

3、 setTimeout 的过程中,要注意变量的处理。对于闭包的应用是一个需要注意的地方。

以上,请采纳,请给分。

在一个网页中点击多个可用项跳转浏览另一个网页之后,例如从苹果的首页跳转到了产品购买页,中间可能要经历几次的网页更替,那么直接从当前页回到第一个打开的网页,

首先找到当前网页中左下角的返回键,如果点击一下,就会返回到上一页。

想要直接返回到第一页的话,可以长按返回键来查看历史记录,然后选择最初打开的网页页面即可。

灵活应用safari浏览器,省去了中间多次点击返回键的操作,可以很好的满足。

<script language=javascript type="text/javascript">

//特别注明:北京时间是格林尼治标准时加八小时,因此用的起始时间也是从八点起算的

var secondServer = parseInt(new Date().getTime()/1000) //1278744646

var secondClient = parseInt(new Date().getTime()/1000)

var secondSub = secondServer - secondClient//两端时间秒差

var f = true

function meizzTime(n)

{

var mei = new Date()

mei.setTime(mei.getTime() + n*1000)//得到一个新的时间

var h = (mei.getHours() >9) ? mei.getHours() : "0" + mei.getHours()//时

var m = (mei.getMinutes() >9) ? mei.getMinutes() : "0" + mei.getMinutes()//分

//var s = (mei.getSeconds() >9) ? mei.getSeconds() : "0" + mei.getSeconds()//秒

document.meizz.clock.value = h +":"+ m +":"+ s//显示时间

if(f &&h == 18){

//在这里修改你按钮的属性,设置为灰色

//alert("111")

f = false

}

setTimeout("meizzTime(secondSub)", 1000)

}

</script>

</head>

<body onLoad="meizzTime(secondSub)">

<form name="meizz">

<input name="clock" size="100" class="form" style="color:#000000">

</form>

</body>

这个是动态的,如果一直开着页面的话,到18点不用刷新页面也会禁用按钮,时间有点急,要吃饭了。下面的你可以根据你的需求改一下