我有一个弹出在层中的表单,我需要使该表单中的所有输入框都变为只读。有什么办法可以做到吗?
我有一个弹出在层中的表单,我需要使该表单中的所有输入框都变为只读。有什么办法可以做到吗?
使用HTML5,可以使用<fieldset disabled />
属性禁用包含的所有输入。
disabled:
如果设置了这个布尔属性,除了第一个可选元素的后代之外,其后代是表单控件时,它们将被禁用,即不可编辑。它们将不会接收任何浏览事件,例如鼠标点击或与焦点相关的事件。通常,浏览器会将这些控件显示为灰色。
这在普通的JavaScript中非常简单,在所有支持只读表单输入的浏览器中都可以有效地工作(这几乎是过去十年中发布的所有浏览器):
var form = document.getElementById("your_form_id");
var elements = form.elements;
for (var i = 0, len = elements.length; i < len; ++i) {
elements[i].readOnly = true;
}
elements[i].disabled = true;
这句话怎么样? - Cory Robinsondisabled
与readOnly
不同。https://dev59.com/mGsz5IYBdhLWcg3wrJ6- - Tim Downbutton
、input[type=submit]
和 input[type=button]
不支持 readonly
属性。请参见 https://jsfiddle.net/z4hoh443/ 获取示例,以及 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input 获取源文档。 - philfreo这是纯JavaScript编写的:
var fields = document.getElementById("YOURDIVID").getElementsByTagName('*');
for(var i = 0; i < fields.length; i++)
{
fields[i].disabled = true;
}
虽然这个问题很老,但是没有人提到可以使用CSS来解决:
pointer-events: none;
整个表单将不会响应点击事件,但是仍然会响应鼠标悬停事件。
$("input, select, option, textarea", "#formid").prop('disabled',true);
您也可以这样做,但这会禁用所有元素(仅适用于可以应用该属性的元素)。$("*", "#formid").prop('disabled',true);
虽然这是一个旧问题,但现在你可以使用 纯JavaScript 中的 数组方法 轻松完成:
form = document.querySelector('form-selector');
Array.from(form.elements).forEach(formElement => formElement.disabled = true);
1) form.elements
返回一个包含所有表单控件(输入框、按钮、fieldset等)的HTMLFormControlsCollection集合。
2) Array.from()
将这个集合转换为数组对象。
3) 这使我们可以使用 array.forEach()
方法遍历数组中的所有项目...
4) ...并使用 formElement.disabled = true
禁用它们。
这里有另一个我使用的纯JavaScript示例。即使没有Array.from(),作为NodeList它也可以正常工作,因为它有自己的forEach方法。
document.querySelectorAll('#formID input, #formID select, #formID button, #formID textarea').forEach(elem => elem.disabled = true);
$("#formid input, #formid select").attr('disabled',true);
$("#formid input, #formid select").attr('readonly',true);
通过在表单上设置禁用交互的属性来禁用表单
<style>form[busy]{pointer-events:none;}</style>
<form>....</form>
<script>
function submitting(event){
event.preventDefault();
const form = this; // or event.target;
// just in case...
if(form.hasAttribute('busy')) return;
// possibly do validation, etc... then disable if all good
form.setAttribute('busy','');
return fetch('/api/TODO', {/*TODO*/})
.then(result=>{ 'TODO show success' return result; })
.catch(error=>{ 'TODO show error info' return Promise.reject(error); })
.finally(()=>{
form.removeAttribute('busy');
})
;
}
Array.from(document.querySelectorAll('form')).forEach(form=>form.addEventListener('submit',submitting);
</script>
if($('#formID').parent().prop("disabled")==true) { return false; }
- Chris O<form>
上,这样我们就可以禁用那些没有使用<fieldset>
的表单。 - Dai