ปิดการใช้งานองค์ประกอบแบบฟอร์มทั้งหมดภายใน div


162

มีวิธีการปิดการใช้งานทุกสาขา (textarea / textfield / ตัวเลือก / input / ช่องทำเครื่องหมาย / ส่ง ฯลฯ ) ในรูปแบบโดยบอกชื่อผู้ปกครอง div ใน jquery / javascript เท่านั้น?


4
โปรดทราบว่าการทำเช่นนี้คุณจะทำให้ค่าขององค์ประกอบเหล่านั้น "หายไป" เมื่อส่งแบบฟอร์ม - เพื่อรักษาค่าให้เป็นแบบนั้นreadOnlyไม่ใช่ปิดใช้งาน
Shadow Wizard คือ Ear For You


1
แนวคิดสามารถซ่อน / แสดงกองหน้าตัวควบคุมที่อนุญาต / ป้องกันไม่ให้คลิกรวมถึงตัวควบคุมที่ปิดใช้งานสไตล์ด้วย css
Jaider

คำตอบ:


261

ลองใช้:inputตัวเลือกพร้อมกับตัวเลือกหลัก:

$("#parent-selector :input").attr("disabled", true);

ฉันสามารถใช้สิ่งนี้เพื่อตั้งค่าอินพุตทั้งหมดภายใน div เป็นค่า 0 ได้หรือไม่
jackson5

2
ฉันต้องการปิดการใช้งาน <a> ด้วย ... <a> ของฉันมีการคลิกเช่นกัน
RAJ

7
การอ้างถึงjQuery : เนื่องจาก: input เป็นส่วนขยาย jQuery และไม่ได้เป็นส่วนหนึ่งของข้อกำหนด CSS การสืบค้นโดยใช้: อินพุตไม่สามารถใช้ประโยชน์จากการเพิ่มประสิทธิภาพที่จัดทำโดยวิธี DOM ดั้งเดิมของ querySelectorAll () เพื่อให้ได้ประสิทธิภาพที่ดีที่สุดเมื่อใช้: อินพุตเพื่อเลือกองค์ประกอบขั้นแรกให้เลือกองค์ประกอบโดยใช้ตัวเลือก CSS ล้วน ๆ จากนั้นใช้. ตัวกรอง (": อินพุต")
acme

2
@acme: เห็นด้วย 100% แต่คำถามไม่ได้ให้คำแนะนำใด ๆ เกี่ยวกับตัวเลือกที่ฉันสามารถกรองได้ ข้อมูลเดียวที่ฉันได้รับคือผู้ใช้ต้องสามารถใช้ชื่อผู้ปกครองdivได้ หากได้รับข้อมูลเพิ่มเติมฉันจะได้พบกับโซลูชั่นที่มีประสิทธิภาพมากขึ้น
Andrew Whitaker

1
ใช้. prop () แทน .attr () (เหนือ jQuery 1.6)
Akshay Gundewar

154
$('#mydiv').find('input, textarea, button, select').attr('disabled','disabled');

4
ควรเป็น ('อินพุต, textarea, ปุ่ม') ตัวเลือกทั้งหมดควรจะมีเครื่องหมายคำพูดหนึ่งชุด api.jquery.com/multiple-selectorทำตามที่คุณกำลังส่งข้อโต้แย้งหลาย ๆ
Ivan Ivanić

2
สิ่งนี้จะพบว่าคุณป้อนข้อมูลโดยไม่สนใจข้อความและปุ่ม : การเลือกรับสัญญาณเป็นวิธีที่จะไป $('#mydiv').find('input, textarea, button')แต่ถ้าคุณต้องการที่จะแสดงไว้อย่างชัดเจนคุณจะต้องใช้
Mark Hildreth

1
... หรือเพียงแค่ $ ('# your-form'). children (). prop ('ปิดการใช้งาน', จริง);
walv

@walv รหัสของคุณใช้งานได้เฉพาะถ้าองค์ประกอบของฟอร์มทั้งหมดเป็นสืบทอดมาจากแบบฟอร์มเดียว Find () ค้นหาองค์ประกอบทั้งหมดในรายการโดยไม่คำนึงถึงระดับถัดลงมา บรรทัดของรหัสนี้ถูกต้องนอกเหนือจากการใช้เสาแทน attr สำหรับ jquery รุ่นใหม่
Chris O

32

สำหรับ jquery 1.6+ ให้ใช้ .prop()แทน.attr(),

$("#parent-selector :input").prop("disabled", true);

หรือ

$("#parent-selector :input").attr("disabled", "disabled");

2
คุณมีสิทธิ แต่บางงาน prop เวลาและบางครั้งไม่ได้ทำงานพิเศษในสาเหตุของช่องทำเครื่องหมายและ RadioButton
Damon

ฉันรู้ว่านี่เป็นเธรดเก่า แต่สิ่งนี้ทำให้เกิดข้อผิดพลาดขึ้นเมื่อใช้ typescript
Simon Price

5
    $(document).ready(function () {
        $('#chkDisableEnableElements').change(function () {
            if ($('#chkDisableEnableElements').is(':checked')) {
                enableElements($('#divDifferentElements').children());
            }
            else {
                disableElements($('#divDifferentElements').children());
            }
        });
    });

    function disableElements(el) {
        for (var i = 0; i < el.length; i++) {
            el[i].disabled = true;

            disableElements(el[i].children);
        }
    }

    function enableElements(el) {
        for (var i = 0; i < el.length; i++) {
            el[i].disabled = false;

            enableElements(el[i].children);
        }
    }

4

เพียงบรรทัดของรหัสนี้จะปิดการใช้งานองค์ประกอบการป้อนข้อมูลทั้งหมด

$('#yourdiv *').prop('disabled', true);

คำตอบที่ดีที่สุดจากความคิดเห็นของฉัน
Ajay2707

2

วิธีการเกี่ยวกับการบรรลุเป้าหมายโดยใช้แอตทริบิวต์ HTML เท่านั้น 'ปิดการใช้งาน'

<form>
 <fieldset disabled>
  <div class="row">
   <input type="text" placeholder="">
   <textarea></textarea>
   <select></select>
  </div>
  <div class="pull-right">
    <button class="button-primary btn-sm" type="submit">Submit</button>
  </div>
 </fieldset>
</form>

เพียงแค่ปิดการใช้งานใน fieldset ทุกฟิลด์ภายใน fieldset นั้นถูกปิดการใช้งาน

$('fieldset').attr('disabled', 'disabled');

1

ฉันใช้ฟังก์ชั่นด้านล่างตามจุดต่าง ๆ ทำงานในองค์ประกอบ div หรือปุ่มในตารางตราบเท่าที่ใช้ตัวเลือกที่ถูกต้อง เพียงแค่ ": ปุ่ม" จะไม่เปิดใช้งานอีกครั้งสำหรับฉัน

function ToggleMenuButtons(bActivate) {
    if (bActivate == true) {
        $("#SelectorId :input[type='button']").prop("disabled", true);
    } else {
        $("#SelectorId :input[type='button']").removeProp("disabled");
    }
}

สองในหนึ่งทางออกที่ดี
กฎ 3 ข้อ

0

การติดตามจะปิดใช้งานอินพุตทั้งหมด แต่จะไม่สามารถไปยังคลาส btn และเพิ่มคลาสเพื่อเขียนทับปิดใช้งาน css

$('#EditForm :input').not('.btn').attr("disabled", true).addClass('disabledClass');

คลาส css

.disabledClass{
  background-color: rgb(235, 235, 228) !important;
}

0

สำหรับฉันคำตอบที่ได้รับการยอมรับใช้งานไม่ได้เนื่องจากฉันมีบางช่องที่ซ่อนอยู่ของ asp net ซึ่งถูกปิดการใช้งานด้วยดังนั้นฉันเลือกที่จะปิดใช้งานช่องที่มองเห็นได้เท่านั้น

//just to save the list so we can enable fields later
var list = [];
$('#parent-selector').find(':input:visible:not([readonly][disabled]),button').each(function () {
    list.push('#' + this.id);
});

$(list.join(',')).attr('readonly', true);

0

ใช้คลาส CSS เพื่อป้องกันการแก้ไของค์ประกอบ Div

CSS:

.divoverlay
{
position:absolute;
width:100%;
height:100%;
background-color:transparent;
z-index:1;
top:0;
}

JS:

$('#divName').append('<div class=divoverlay></div>');

หรือเพิ่มชื่อคลาสในแท็ก HTML มันจะป้องกันไม่ให้แก้ไของค์ประกอบ Div


0

ประเภทข้อความเท่านั้น

$(".form-edit-account :input[type=text]").attr("disabled", "disabled");

ประเภทรหัสผ่านเท่านั้น

$(".form-edit-account :input[type=password]").attr("disabled", "disabled");

ประเภทอีเมลเท่านั้น

$(".form-edit-account :input[type=email]").attr("disabled", "disabled");

0

หากฟอร์มของคุณอยู่ภายในdivประกอบด้วยองค์ประกอบการป้อนฟอร์มดังนั้นแบบสอบถามแบบง่ายนี้จะปิดใช้งานองค์ประกอบทั้งหมดภายในformแท็ก:

<div id="myForm">
    <form action="">
    ...
    </form>
</div>

อย่างไรก็ตามมันจะปิดการใช้งานอื่นที่ไม่ใช่องค์ประกอบการป้อนข้อมูลformเนื่องจากจะมีเอฟเฟกต์เฉพาะกับองค์ประกอบประเภทอินพุตดังนั้นจึงเหมาะสมอย่างมากสำหรับทุกรูปแบบ!

$('#myForm *').attr('disabled','disabled');

1
โปรดแก้ไขประโยคที่สองของคุณ ดูเหมือนว่ารหัสของคุณจะปิดการใช้งานองค์ประกอบที่ไม่ใช่ข้อมูลเข้า แต่ก็บอกว่าจะมีผลกับองค์ประกอบสัญญาณเข้าเท่านั้น โปรดอธิบายความหมายของคุณ (เคล็ดลับเรียบร้อยโดยวิธี - คำตอบที่ดี)
cssyphus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.