เพิ่มแอททริบิวต์ที่ถูกปิดใช้งานในองค์ประกอบอินพุตโดยใช้ Javascript


141

ฉันมีกล่องอินพุตและฉันต้องการให้ปิดการใช้งานและในขณะเดียวกันก็ซ่อนไว้เพื่อหลีกเลี่ยงปัญหาเมื่อทำการย้ายแบบฟอร์มของฉัน

จนถึงตอนนี้ฉันมีรหัสต่อไปนี้เพื่อซ่อนอินพุตของฉัน:

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show().find('.longboxsmall').hide();
});

นี่คืออินพุตที่ถูกซ่อนไว้เป็นผลลัพธ์:

<input class="longboxsmall" type="text" />

ฉันจะเพิ่มแอททริบิวต์ที่ปิดใช้งานให้กับอินพุตได้อย่างไร

คำตอบ:


306

$("input").attr("disabled", true); ณ ... ฉันไม่รู้อะไรอีกแล้ว

เป็นเดือนธันวาคม 2556 และฉันไม่รู้จะบอกอะไรคุณ

ก่อนอื่นมันก็เป็นแบบ.attr()นั้นเสมอ.prop()ดังนั้นฉันกลับมาที่นี่เพื่อปรับปรุงคำตอบและทำให้มันแม่นยำยิ่งขึ้น

จากนั้นอีกหนึ่งปีให้หลัง jQuery เปลี่ยนใจพวกเขาอีกครั้งและฉันไม่ต้องการแม้แต่จะติดตามเรื่องนี้

เรื่องสั้นสั้น ๆ ณ ตอนนี้นี่เป็นคำตอบที่ดีที่สุด: "คุณสามารถใช้ทั้ง ... แต่มันขึ้นอยู่กับ"

คุณควรอ่านคำตอบนี้แทน: https://stackoverflow.com/a/5876747/257493

และบันทึกประจำรุ่นสำหรับการเปลี่ยนแปลงนั้นรวมอยู่ที่นี่:

ไม่ควรใช้ .attr () หรือ. prop () สำหรับการรับ / การตั้งค่า ใช้เมธอด .val () แทน (แม้ว่าจะใช้. atr ("value", "somevalue") จะทำงานต่อไปได้เหมือนเดิมก่อน 1.6)

สรุปการใช้งานที่ต้องการ

ควรใช้เมธอด .prop () สำหรับคุณสมบัติ / คุณสมบัติบูลีนและสำหรับคุณสมบัติที่ไม่มีอยู่ใน html (เช่น window.location) แอตทริบิวต์อื่น ๆ ทั้งหมด (สิ่งที่คุณเห็นใน html) สามารถและควรได้รับการจัดการด้วยวิธีการ. attr ()

หรือในคำอื่น ๆ :

".prop = สิ่งที่ไม่ใช่เอกสาร"

".attr" = รายการเอกสาร

... ...

ขอให้เราทุกคนเรียนรู้บทเรียนที่นี่เกี่ยวกับความเสถียรของ API ...


3
+1 สำหรับการทำให้ข้อความอัปเดตมีขนาดใหญ่พอสำหรับฉันที่จะต้องใส่ใจ
Vael Victus

@VaelVictus ไม่เร็วนัก ฉันขอโทษที่บอกว่าพวกเขาเปลี่ยนไปอีกหนึ่งปีหลังจากฉันโพสต์สิ่งนี้ ... และฉันลืมคำตอบนี้ อ่านคำตอบนี้: stackoverflow.com/a/5876747/257493
ไม่ระบุตัวตน

1
ความแตกต่างของเอกสาร / ไม่ใช่เอกสารระหว่าง. prop และ. atr นั้นมีประโยชน์อย่างเหลือล้นและฉันไม่เคยเห็นบริบทที่ล้อมกรอบในลักษณะที่รวบรัดมาก่อน ชื่นชมมาก!
ไม่มีใครเทียบ

51

รหัสการทำงานจากแหล่งที่มาของฉัน:

HTML WORLD

<select name="select_from" disabled>...</select>

JS WORLD

var from = jQuery('select[name=select_from]');

//add disabled
from.attr('disabled', 'disabled');



//remove it
from.removeAttr("disabled");

2
เป็นหมายเหตุสำหรับผู้ที่มาที่นี่จาก Google โดยตรงจากjQuery :As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set. To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method
Erenor Paz

16

หากคุณใช้ jQuery มีวิธีตั้งค่าแอตทริบิวต์ที่ปิดใช้งานอยู่สองสามวิธี

var $element = $(...);
    $element.prop('disabled', true);
    $element.attr('disabled', true); 

    // The following do not require jQuery
    $element.get(0).disabled = true;
    $element.get(0).setAttribute('disabled', true);
    $element[0].disabled = true;
    $element[0].setAttribute('disabled', true);

เกี่ยวกับ$element.eq(0)[0].disabled = true;อะไร :-P
qwertynl

1
ใช่นั่นคือขั้นสูงสำหรับฉันฉันไม่ได้ไปไกลขนาดนั้นเพื่อปรับปรุงประสิทธิภาพ
iConnor

+1 แม้ว่ามันจะค่อนข้างซ้ำซ้อน หากคุณกำลังจะจัดการกับองค์ประกอบของ NodeList / array คุณจะต้องเลือกโดยใช้ดัชนีเช่นนั้น การวนซ้ำหรือเพียงแค่เลือกองค์ประกอบที่คุณต้องการเท่านั้น

13
$(element).prop('disabled', true); //true|disabled will work on all
$(element).attr('disabled', true); 
element.disabled = true;
element.setAttribute('disabled', true);

จากทั้งหมดที่กล่าวมาเป็นคำตอบที่ถูกต้องสมบูรณ์แบบ เลือกหนึ่งที่เหมาะกับความต้องการของคุณที่สุด


1
ขอบคุณที่ให้บริการโซลูชันที่ไม่ต้องใช้ jQuery
Elias Zamaria

12

คุณสามารถรับองค์ประกอบ DOM และตั้งค่าคุณสมบัติที่ปิดใช้งานได้โดยตรง

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').hide()[0].disabled = 'disabled';
});

หรือหากมีมากกว่าหนึ่งคุณสามารถใช้each()เพื่อตั้งค่าทั้งหมด:

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').each(function() {
               this.style.display = 'none';
               this.disabled = 'disabled';
          });
});

5

เพียงใช้attr()วิธีการของ jQuery

$(this).closest("tr").next().show().find('.longboxsmall').attr('disabled', 'disabled');

3
และลบสถานะปิดการใช้งานโดยใช้.removeAttr('disabled');
ruhong

2

ตั้งแต่คำถามถูกถามว่าจะทำอย่างไรกับ JS ฉันให้การใช้งานวานิลลา JS

var element = document.querySelector(".your-element-class-goes-here");
// it's a good idea to check whether the element exists
if (element != null && element != undefined) {
  element.disabled = "disabled";
}

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