我在 Ajax 表单上有一个按钮,当按下该按钮时,它会向用户指示它正在“搜索”一种小型“颤动”,以便在查询数据库时让用户保持忙碌。
单击提交按钮时,它会转到一个函数。该功能将禁用按钮,收集表单上填写的内容,执行 Ajax 调用(非异步 - 意味着脚本在继续执行下一行代码之前等待调用完成)然后重新- 启用按钮。
像这样:
function CheckForm()
{
disableButton(document.getElementById("save"));
....... lots of instructions in here ........
....... Loops through every form el .........
//Ajax called
CallAjax(sUrls, sParams);
enableButton(document.getElementById("save"));
}
function disableButton(element)
{
try
{
disabledEl = element.id
disabledElOrigTxt = element.value;
element.value = ' Loading...'
addClass(element, "pleaseWait");
addClass(document.myForm.reset, "resetWait");
element.disabled = true;
document.myForm.reset.disabled = true;
//return true;
}
catch(e)
{
////SHHHHHH
}
}
function enableButton(element, timer)
{
try
{
if(element.value == ' Loading...')
element.value = disabledElOrigTxt;
removeClass(element, "pleaseWait");
removeClass(document.myForm.reset, "resetWait");
element.disabled = false;
document.myForm.reset.disabled = false;
clearTimeout(timer);
return true;
}
catch(e)
{
////SHHHHHH
}
}
function hasClass(element, className)
{
var classes = element.className.split(' ');
var len = classes.length;
for (var i=0; i<len; i++)
{
if (classes[i] == className)
return true;
}
return false;
}
function addClass(element, className)
{
if (!hasClass(element, className))
element.className = (element.className == '' ? className : element.className + ' ' + className);
}
function removeClass(element, className)
{
var newValue = '';
var classes = element.className.split(' ');
var len = classes.length;
for (var i=0; i<len; i++)
{
if (classes[i] != className)
newValue += newValue.length ? ' ' + classes[i] : classes[i];
}
element.className = newValue;
}
这适用于 Mozilla、IE,但不适用于 CHROME。有人知道为什么吗?
如果我修改 disableButton() 并在尝试的最后一行设置为 alert("hi") ,在 Chrome 中我可以观察到按钮的变化......但只有当我在那里发出警报以停止脚本时。显然这不是我想做的。