คำถามนี้มีอายุ 2 ปี แต่ยังคงเป็นคำถามที่ดีและเป็นผลลัพธ์แรกของ Google ... แต่คำตอบที่มีอยู่ทั้งหมดแนะนำให้ตั้งค่าและลบแอตทริบิวต์ HTML (removeAttr ("disabled")) "disabled" ซึ่งไม่ใช่ แนวทางที่ถูกต้อง มีความสับสนมากมายเกี่ยวกับคุณสมบัติและคุณสมบัติ
HTML
"ความพิการ" ใน<input type="button" disabled>
ในมาร์กอัปที่เรียกว่าแอตทริบิวต์แบบบูลโดยของ W3C
HTML กับ DOM
อ้างถึง:
สถานที่ให้บริการอยู่ใน DOM; แอตทริบิวต์อยู่ใน HTML ที่วิเคราะห์คำใน DOM
https://stackoverflow.com/a/7572855/664132
JQuery
ที่เกี่ยวข้อง:
อย่างไรก็ตามแนวคิดที่สำคัญที่สุดที่ต้องจำเกี่ยวกับคุณสมบัติที่ตรวจสอบคือมันไม่สอดคล้องกับคุณสมบัติที่ตรวจสอบ แอตทริบิวต์จริงสอดคล้องกับ defaultChecked ทรัพย์สินและควรใช้เฉพาะในการตั้งค่าเริ่มต้นของช่อง ค่าแอททริบิวที่ทำเครื่องหมายไว้จะไม่เปลี่ยนแปลงตามสถานะของช่องทำเครื่องหมายในขณะที่คุณสมบัติที่เลือกทำอยู่ ดังนั้นวิธีที่เข้ากันได้ข้ามเบราว์เซอร์เพื่อตรวจสอบว่ามีการทำเครื่องหมายในช่องทำเครื่องหมายคือใช้คุณสมบัติ ...
ที่เกี่ยวข้อง:
โดยทั่วไปคุณสมบัติจะมีผลต่อสถานะไดนามิกขององค์ประกอบ DOM โดยไม่เปลี่ยนแอตทริบิวต์ HTML ที่ทำให้เป็นอนุกรม ตัวอย่างรวมถึงคุณสมบัติค่าขององค์ประกอบอินพุตคุณสมบัติปิดใช้งานของอินพุตและปุ่มหรือคุณสมบัติที่ตรวจสอบของช่องทำเครื่องหมาย ควรใช้เมธอด .prop () เพื่อตั้งค่าปิดใช้งานและตรวจสอบแทนเมธอด. atr ()
$( "input" ).prop( "disabled", false );
สรุป
หากต้องการ [... ] เปลี่ยนคุณสมบัติ DOM เช่น [... ] สถานะการปิดใช้งานองค์ประกอบองค์ประกอบให้ใช้วิธี. prop ()
( http://api.jquery.com/attr/ )
ในส่วนของการปิดการใช้งานการเปลี่ยนแปลงคำถาม: มีเหตุการณ์ที่เรียกว่า "อินพุต" แต่การสนับสนุนเบราว์เซอร์มี จำกัดและไม่ใช่เหตุการณ์ jQuery ดังนั้น jQuery จะไม่ทำงาน เหตุการณ์การเปลี่ยนแปลงทำงานได้อย่างน่าเชื่อถือ แต่ถูกไล่ออกเมื่อองค์ประกอบขาดโฟกัส ดังนั้นหนึ่งอาจรวมสอง (บางคนยังฟังคีย์และวาง)
นี่คือโค้ดที่ยังไม่ผ่านการทดสอบเพื่อแสดงสิ่งที่ฉันหมายถึง:
$(document).ready(function() {
var $submit = $('input[type="submit"]');
$submit.prop('disabled', true);
$('input[type="text"]').on('input change', function() { //'input change keyup paste'
$submit.prop('disabled', !$(this).val().length);
});
});