一、禁用表单元素
在表单交互场景中,通过设置disabled
属性可有效阻止用户输入:
// 原生DOM操作document.getElementById('username').disabled = true;
// jQuery写法
$('#submitBtn').prop('disabled', true);
二、禁用按钮交互
通过状态管理实现按钮防重复点击:
function handlePayment() { const btn = document.querySelector('#payButton');
btn.disabled = true;
btn.textContent = '处理中...';
// 异步操作完成后恢复状态
}
三、禁用链接跳转
常规链接需通过事件阻止实现禁用效果:
document.querySelector('.disabled-link').addEventListener('click', (e) => { e.preventDefault();
e.stopPropagation();
});
四、高级禁用模式
1. CSS视觉禁用
.disabled-element { opacity: 0.6;
pointer-events: none;
cursor: not-allowed;
}
2. 动态禁用控制
function toggleDisable(selector, state) { const el = document.querySelector(selector);
el.disabled = state;
el.setAttribute('aria-disabled', state.toString());
}
- 始终通过
setAttribute
同步HTML属性状态 - 对禁用元素添加
aria-disabled
提升无障碍访问 - 避免完全移除事件监听器导致状态不可逆
五、框架适配方案
// React示例<button disabled={isLoading}>提交</button>
// Vue示例
<input :disabled="isProcessing">
最佳实践建议
- 优先使用原生
disabled
属性实现标准化禁用 - 禁用交互需同步更新视觉状态与ARIA属性
- 对关键操作提供禁用状态解释说明
- 使用
MutationObserver
监控禁用状态变化