วิธีการลบคุณลักษณะ "ปิดการใช้งาน" โดยใช้ jQuery?


394

ฉันต้องปิดการใช้งานอินพุตในตอนแรกจากนั้นคลิกลิงก์เพื่อเปิดใช้งาน

นี่คือสิ่งที่ฉันได้ลองมาแล้ว แต่มันไม่ได้ผล

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

jQuery:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').removeAttr("disabled")
});


นี่แสดงให้ฉันtrueแล้วfalseแต่ไม่มีอะไรเปลี่ยนแปลงสำหรับอินพุต:

$("#edit").click(function(event){
   alert('');
   event.preventDefault();
   alert($('.inputDisabled').attr('disabled'));
   $('.inputDisabled').removeAttr("disabled");
   alert($('.inputDisabled').attr('disabled'));
});

2
ฉันไม่เห็นปัญหาของคุณ คุณจะถามอะไร
nicosantangelo

ดังนั้นคำถามคืออะไร ฉันหมายความว่าคุณกำลังเผชิญปัญหาอะไร
Satya Teja

7
ใช้ prop () - .prop ('ปิดใช้งาน', เท็จ)
Jay Blanchard

ถ้าปัญหาของคุณได้รับการแก้ไขโปรดติ๊กได้รับการยอมรับ (จริง) คำตอบอื่น ๆ จะรู้ว่า ...
dhamu

ปัญหาคือว่ามันไม่ได้ปิดการใช้งานหลังจาก
clic

คำตอบ:


817

มักจะใช้prop()วิธีการเปิดหรือปิดการใช้งานองค์ประกอบเมื่อใช้ jQuery (ดูด้านล่างสำหรับทำไม)

ในกรณีของคุณมันจะเป็น:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').prop("disabled", false); // Element(s) are now enabled.
});

ตัวอย่าง jsFiddle ที่นี่


ทำไมต้องใช้prop()เมื่อคุณสามารถใช้attr()/ removeAttr()เพื่อทำสิ่งนี้?

โดยทั่วไปprop()ควรจะใช้เมื่อได้รับหรือการตั้งค่าคุณสมบัติ (เช่นautoplay, checked, disabledและrequiredหมู่คนอื่น ๆ )

โดยการใช้removeAttr()คุณจะลบdisabledแอตทริบิวต์ออกอย่างสมบูรณ์- ในขณะที่prop()เพียงตั้งค่าบูลีนพื้นฐานของคุณสมบัติเป็นเท็จ

ในขณะที่สิ่งที่คุณต้องการสามารถทำได้โดยใช้attr()/ removeAttr()ไม่ได้หมายความว่าควรจะทำ (และอาจทำให้เกิดพฤติกรรมที่แปลก / มีปัญหาเช่นในกรณีนี้)

สารสกัดต่อไปนี้ (นำมาจากเอกสาร jQuery สำหรับ prop () ) อธิบายจุดเหล่านี้โดยละเอียดยิ่งขึ้น:

"ความแตกต่างระหว่างคุณลักษณะและคุณสมบัติอาจมีความสำคัญในสถานการณ์ที่เฉพาะเจาะจงก่อน jQuery 1.6 .attr()บางครั้งวิธีนำค่าคุณสมบัติเข้ามาในบัญชีเมื่อดึงคุณสมบัติบางอย่างซึ่งอาจก่อให้เกิดพฤติกรรมที่ไม่สอดคล้องกันในขณะที่ jQuery 1.6 .prop() วิธีให้วิธีการดึงข้อมูลอย่างชัดเจน ค่าคุณสมบัติในขณะที่ .attr()ดึงคุณสมบัติ

"คุณสมบัติโดยทั่วไปส่งผลกระทบต่อสถานะไดนามิกขององค์ประกอบ DOM โดยไม่เปลี่ยนแอตทริบิวต์ HTML ที่เป็นอนุกรมตัวอย่างเช่นvalue คุณสมบัติขององค์ประกอบอินพุตdisabledคุณสมบัติของอินพุตและปุ่มหรือcheckedคุณสมบัติของช่องทำเครื่องหมาย.prop()วิธีควรใช้เพื่อตั้งค่าdisabledและcheckedแทนที่จะเป็น.attr() วิธี. .val()วิธีการที่ควรจะใช้สำหรับการรับและการตั้งค่า value."


3
ผู้คนควรรู้ด้วยว่าจดจ่อกับการตรวจสอบสิ่งสกปรกซึ่งทำตัวแตกต่างอย่างสิ้นเชิงattrกับpropช่องทำเครื่องหมาย: w3.org/TR/html5/forms.html#concept-input-checked-dirtyยกเว้นการแก้ปัญหาภายใน jQuery
Ciro Santilli 郝海东冠状病六四事件法轮功

19
อืม, .prop ("ปิดการใช้งาน", เท็จ) ดูเหมือนจะไม่ทำงานสำหรับฉันด้วยปุ่มเดียว - ปล่อยให้แอตทริบิวต์ 'ถูกปิดใช้งาน' ในแท็กโดยไม่มีค่า
UpTheCreek

3
@UpTheCreek ไม่ทำงานสำหรับฉันเช่นกัน แต่ฉันค้นพบว่าเป็นปัญหาเกี่ยวกับขอบเขตของประโยค 'this' (ตามปกติ) ในกรณีที่เฉพาะเจาะจง.prop()ถูกดำเนินการในองค์ประกอบที่ชี้โดยthis( this.prop("disabled", false)แต่เป็นการโทรกลับมันมีผลผูกพันกับองค์ประกอบที่ไม่ถูกต้องดังนั้นฉันจึงต้องทำvar that = thisวิธีแก้ปัญหาทั่วไปพยายามที่จะเล่นกับ.apply()/ .call()ไม่ได้ทำงานได้ดีฉันไม่รู้ . ทำไมตรวจสอบอีกครั้งด้วยconsole.log(this)หากมีการตั้งไปยังวัตถุที่คุณต้องการเพียงแค่ก่อนที่จะเรียกthis.prop(...)
Kamafeather

3
ฉันเสนอชื่อคำตอบนี้เป็นผู้สมัครสำหรับการแปลงไปยังส่วนเอกสาร ชัดเจนสมบูรณ์เขียนได้ดี
แอนน์กันน์

4
โดยใช้ removeAttr () คุณจะลบคุณลักษณะที่ปิดการใช้งานอย่างสมบูรณ์ - ในขณะที่ prop () เป็นเพียงการตั้งค่าบูลีนพื้นฐานของคุณสมบัติเป็นเท็จ ฉันไม่เชื่อว่าสิ่งนี้จะเป็นจริง ใน HTML การมีอยู่ของdisabledคุณสมบัติจะปิดใช้งานองค์ประกอบ ตัวอย่างเช่นการมี<button disabled="false"></button> ปุ่มจะไม่เปิดใช้งานคุณสมบัติจะต้องถูกลบออก โดยการโทร$('button').prop('disabled', false);jQuery จะลบคุณสมบัติให้คุณดังที่ฉันสังเกตเห็นในcodepen นี้ (ตรวจสอบเพื่อดูการลบคุณสมบัติ)
Naftali

42
<input type="text" disabled="disabled" class="inputDisabled" value="">
​<button id="edit">Edit</button>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

$("#edit").click(function(event){
    event.preventDefault();
    $('.inputDisabled').removeAttr("disabled")
});​

http://jsfiddle.net/ZwHfY/


42

เพื่อลบการใช้คุณสมบัติที่ถูกปิดใช้งาน

 $("#elementID").removeAttr('disabled');

และเพื่อเพิ่มการใช้คุณลักษณะที่ปิดใช้งาน

$("#elementID").prop("disabled", true);

สนุก :)


4
หรือเพียงแค่ element.removeAttribute ('disabled') ใน vanilla js
Dragos Rusu

16

ใช้แบบนี้

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

<div id="edit">edit</div>

JS:

 $('#edit').click(function(){ // click to
            $('.inputDisabled').attr('disabled',false); // removing disabled in this class
 });

6
อันนี้ใช้ได้จริงสำหรับฉัน เสา ('ปิดการใช้งาน', เท็จ) ไม่ได้ผลอย่างน่าประหลาดใจ
สเตฟาน

@tefan สิ่งเดียวกันที่นี่! คุณรู้ไหมว่าทำไม
Alexander Suraphel

1
ฉันรู้ว่านี่เป็นเรื่องโบราณ แต่ถ้ามีคนยังคงดิ้นรนกับเรื่องนี้ปัญหาของฉันคือองค์ประกอบนั้นเป็น<a>สิ่งที่.prop('disabled', false)ไม่ได้ผล ฉันเปลี่ยนเป็น a <button>และใช้งานได้ในขณะนี้
Oliver Nagy


3

คิดว่านี่คุณสามารถติดตั้งได้อย่างง่ายดาย

$(function(){
$("input[name^=radio_share]").click
(
    function()
    {
        if($(this).attr("id")=="radio_share_dependent")
        {
            $(".share_dependent_block input, .share_dependent_block select").prop("disabled",false);   
        }
        else
        {
            $(".share_dependent_block input, .share_dependent_block select").prop("disabled",true);   
        }
    }
 );
});

3

นี่เป็นรหัสเดียวที่ทำงานสำหรับฉัน:

element.removeProp('disabled')

โปรดทราบว่าคุณไม่removePropremoveAttr

ฉันใช้jQuery 2.1.3ที่นี่


12
จากเอกสาร jQuery: สำคัญ: เมธอด .removeProp () ไม่ควรใช้เพื่อตั้งค่าคุณสมบัติเหล่านี้เป็นเท็จ เมื่อลบคุณสมบัติดั้งเดิมแล้วจะไม่สามารถเพิ่มได้อีก ดู .removeProp () สำหรับข้อมูลเพิ่มเติม
XanatosLightfiren

2

2561 โดยไม่มี JQuery

ฉันรู้ว่าคำถามเกี่ยวกับ JQuery: คำตอบนี้เป็นเพียง FYI

document.getElementById('edit').addEventListener(event => {
    event.preventDefault();
    [...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
}); 

0

คำถามนี้กล่าวถึง jQuery โดยเฉพาะ แต่หากคุณต้องการทำสิ่งนี้ให้สำเร็จโดยปราศจาก jQuery สิ่งที่เทียบเท่าใน vanilla JavaScript คือ:

elem.removeAttribute('disabled');

elem.removeAttr('disabled');ทำงานให้ฉัน
Cheng Hui Yuan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.