我有一个弹出一个图层的表单,我需要让该表单中的所有内容只读取它的输入类型。无论如何要这样做?
答案 0 :(得分:39)
您可以使用:input
选择器,并执行以下操作:
$("#myForm :input").prop('readonly', true);
:input
会选择所有<input>
,<select>
,<textarea>
和<button>
元素。此属性也是readonly
,如果您对元素使用disabled
,则不会将其发布到服务器,因此请根据该属性选择所需的属性。
答案 1 :(得分:36)
这在普通的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;
}
答案 2 :(得分:29)
使用HTML5,可以禁用使用<fieldset disabled />
属性包含的所有输入。
禁用:
如果设置了此布尔属性,则表单控件就是它 后代,除了它的第一个选择的后代 元素,被禁用,即不可编辑。他们不会收到任何 浏览事件,例如鼠标点击或与焦点相关的事件。经常 浏览器将此类控件显示为灰色。
答案 3 :(得分:4)
纯粹的Javascript:
var fields = document.getElementById("YOURDIVID").getElementsByTagName('*');
for(var i = 0; i < fields.length; i++)
{
fields[i].disabled = true;
}
答案 4 :(得分:3)
您可以使用jQuery以最简单的方式执行此操作。它将对所有input,select和textarea元素执行此操作(即使这些类型的数量不止一个)。
$("input, select, option, textarea", "#formid").prop('disabled',true);
或者你也可以这样做,但是这将禁用所有元素(只有那些可以应用它的元素)。
$("*", "#formid").prop('disabled',true);
禁用的属性可以应用于以下元素:
但是您认为您更喜欢使用它。
答案 5 :(得分:2)
旧问题,但是现在您可以使用数组方法在纯JavaScript 中轻松完成:
form = document.querySelector('form-selector');
Array.from(form.elements).forEach(formElement => formElement.disabled = true);
1)form.elements
返回带有所有表单控件(输入,按钮,字段集等)的集合作为HTMLFormControlsCollection。
2)Array.from()
将集合变成数组对象。
3)这使我们可以使用array.forEach()
方法来遍历数组中的所有项目...
4)...并使用formElement.disabled = true
将其禁用。
答案 6 :(得分:1)
$("#formid input, #formid select").attr('disabled',true);
或将其设为只读:
$("#formid input, #formid select").attr('readonly',true);
答案 7 :(得分:1)
这是我使用的另一个纯 JavaScript 示例。在没有 Array.from() 作为 NodeList has it's own forEach 方法的情况下工作正常。
document.querySelectorAll('#formID input, #formID select, #formID button, #formID textarea').forEach(elem => elem.disabled = true);
答案 8 :(得分:0)
// get the reference to your form
// you may need to modify the following block of code, if you are not using ASP.NET forms
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
// this code disables all form elements
var elements = theForm.elements;
for (var i = 0, len = elements.length; i < len; ++i) {
elements[i].disabled = true;
}
答案 9 :(得分:0)
旧问题,但没有人提到使用CSS:
pointer-events: none;
整个形式都不受点击的影响,而且悬停。
答案 10 :(得分:0)
这个人从来没有让我失败,在其他答案中我也没有看到这种方法。
//disable inputs
$.each($("#yourForm").find("input, button, textarea, select"), function(index, value) {
$(value).prop("disabled",true);
});
答案 11 :(得分:0)
了解它的价值,知道这篇文章已经很老了……这不是只读方法,但是对我有用。我使用form.hidden = true。
答案 12 :(得分:0)
通过在表单上设置一个通常禁用交互的属性来禁用表单
<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>
答案 13 :(得分:0)
Javascript:禁用所有表单域:
Welcome to the base calculator
Please provide the first number: 5
Please provide the second number: 5
Please provide mathematical preference: + - * / : +
The sum of 5 + 5 is 10
Press 'q' to quit or anything to go on:
Please provide the first number or empty to use the previous result (10):
Please provide the second number: 5
Please provide mathematical preference: + - * / : *
The result of multiplying 10 * 5 is 50
Press 'q' to quit or anything to go on:
Please provide the first number or empty to use the previous result (50):12
Please provide the second number: 12
Please provide mathematical preference: + - * / : -
The subtraction of 12 - 12 is 0
Press 'q' to quit or anything to go on: q
The program will now quit
要启用表单的所有字段,请参阅下面的代码
function disabledForm(){
var inputs = document.getElementsByTagName("input");
for (var i = 0; i < inputs.length; i++) {
inputs[i].disabled = true;
}
var selects = document.getElementsByTagName("select");
for (var i = 0; i < selects.length; i++) {
selects[i].disabled = true;
}
var textareas = document.getElementsByTagName("textarea");
for (var i = 0; i < textareas.length; i++) {
textareas[i].disabled = true;
}
var buttons = document.getElementsByTagName("button");
for (var i = 0; i < buttons.length; i++) {
buttons[i].disabled = true;
}
}
答案 14 :(得分:-5)
谢谢Tim,
这真的很有帮助。 当我们有控件并且我们处理它们上的事件时,我做了一些调整。
var form = document.getElementById("form");
var elements = form.elements;
for (var i = 0, len = elements.length; i < len; ++i) {
elements[i].setAttribute("onmousedown", "");
}