我需要更新应用程序,以便当用户点击按钮等时,所有输入字段都将被禁用。这是我到目前为止javascript的内容。以下作品和一切,所以不用担心。
function disableAllInputs() {
var inputs = getAllInputs();
for (i = 0; i < inputs.length; i++) {
inputs[i].disabled = true;
}
}
function enableAllInputs() {
var inputs = getAllInputs();
for (i = 0; i < inputs.length; i++) {
inputs[i].disabled = false;
}
}
function getAllInputs() {
var inputs = document.getElementsByTagName('input');
var selects = document.getElementsByTagName('select');
var allInputs = new Array();
var counter = 0;
for (i = 0; i < inputs.length ; i++) {
allInputs[counter] = inputs[i];
counter++;
}
for (i = 0; i < selects.length; i++) {
allInputs[counter] = selects[i];
counter++;
}
return allInputs;
}
现在,在我的HTML中我基本上有这个:
<form name="MyForm" method="post" action="MyAction.do" onsubmit="onSubmit();">
//form code
<input type="submit" value="Save" name="submit" onclick="onSaveClick()" >
</form>
一切似乎都很好。但是,我需要让它全部可测试。我想延迟一下,以便所有东西都冻结,测试人员可以确保所有东西都被禁用等等。但这个暂停应该是暂时的并且可以立即移除而没有任何可能的副作用(即调用暂停会很好) )功能然后只删除调用)。
以下是一些问题:
1 - 如果我在onSaveClick方法中调用disableAllInputs方法,表单不会提交(我假设因为按钮被禁用了)。
2 - 如果我在onSubmit方法中调用disableAllInputs方法,则暂停似乎不起作用。
有人可以想到在按钮被禁用后无缝暂停表单提交的方法吗?我知道setTimeout等。我只是找不到合适的呼叫位置等使用。似乎暂停表格并最终提交表格。
另外,我将JS放在一个单独的.js文件中,所以如果我可以只包含该文件并在适当的时候添加disableAllInputs方法(也就是说,我想避免超时)会很好在onSubmit方法等)。
答案 0 :(得分:1)
好吧,您可以使用各种方法插入暂停,但所有这些方法都会导致整个页面在暂停期间无响应。最简单的例子是警报框。 (您也可以使用SJAX - 同步AJAX。)
您可以通过触发致命错误来停止代码,例如调用不存在的函数。 stopJavascript();
但这不允许代码继续使用。
唯一的另一种选择是将函数拆分为两个函数,并使用setTimeout
来延迟第一个函数的调用。但是,这将更难实施,更难以删除。