简单的复选框 全选 反选功能

代码优化说明

注释改进

添加了详细的JSDoc格式注释,使代码功能更明确:

javascript 复制代码
/**
 * 处理表单提交按钮的点击事件
 * @param {jQuery} $form - jQuery表单对象
 * @param {Object} options - 配置选项
 * @param {boolean} options.validate - 是否进行表单验证
 * @returns {void}
 */
function handleFormSubmit($form, options) {
  // 函数实现...
}

现代代码实践

更新了事件绑定方式和变量声明:

javascript 复制代码
// 使用.on()方法替代过时的.click()
const submitButton = $('#submit-btn');
submitButton.on('click', function() {
  // 事件处理逻辑
});

// 使用const声明常量
const MAX_RETRIES = 3;
const API_ENDPOINT = '/api/data';

逻辑清晰化

优化了单选框事件处理的逻辑结构:

javascript 复制代码
// 分解计算步骤
function calculateTotal(selectedOption) {
  const basePrice = parseFloat($('#base-price').val());
  const taxRate = 0.08; // 8%税率
  const discount = selectedOption === 'premium' ? 50 : 0;
  
  const subtotal = basePrice - discount;
  const taxAmount = subtotal * taxRate;
  const total = subtotal + taxAmount;
  
  return total.toFixed(2);
}

性能优化

保持了高效的事件委托机制:

javascript 复制代码
// 使用事件委托处理动态生成的元素
$('#container').on('click', '.dynamic-item', function() {
  // 即使.dynamic-item是后来添加的也能正常工作
  console.log('Item clicked:', $(this).data('id'));
});

这些改进使代码更易于维护、更具可读性,同时保持了良好的性能特性。

下面是优化后的代码:

javascript 复制代码
/**
 * 初始化全选反选功能
 * @param {string} allSelector - 全选复选框的选择器,用于标识全选元素
 * @param {string} singleSelector - 单个复选框的选择器,用于标识单个可选元素
 */
function initSelectAll(allSelector, singleSelector) {
    // 全选框点击事件:同步所有单选框状态
    $(allSelector).on('click', function() {
        const isChecked = $(this).prop('checked'); // 获取全选框当前选中状态
        $(singleSelector).prop('checked', isChecked); // 设置所有单选框状态与全选框一致
    });

    // 单选框点击事件:更新全选框状态(使用事件委托处理动态元素)
    $(document).on('click', singleSelector, function() {
        const totalItems = $(singleSelector).length; // 计算所有单选框总数
        const checkedItems = $(singleSelector + ':checked').length; // 计算选中单选框数量
        const allChecked = totalItems === checkedItems; // 判断是否全部选中
        $(allSelector).prop('checked', allChecked); // 设置全选框状态
    });
}

// 调用函数示例
initSelectAll('.all_checkbox', '.single_checkbox');

优化说明

  1. 注释优化

    • 添加了JSDoc注释,明确参数类型和作用,便于其他开发者理解。
    • 内部注释更简洁,直接描述代码逻辑,避免冗余。
  2. 代码结构优化

    • 在jQuery中,使用.on('click', handler)方法来绑定点击事件是官方推荐的做法。相比于传统的.click()方法,这种方式具有以下优势:

    • 更灵活的事件处理

      • 支持事件委托(event delegation),通过将事件绑定到父元素来处理动态添加的子元素
      • 可以一次性绑定多个事件类型(如.on('click mouseenter', handler)
      • 更容易实现事件解绑(使用.off()方法)
    • 代码示例

    javascript 复制代码
    // 推荐方式
    $('#submitBtn').on('click', function() {
        console.log('Button clicked');
    });
    
    // 事件委托示例
    $('#container').on('click', '.dynamic-item', function() {
        console.log('Dynamic item clicked');
    });

    在处理单选框事件时,建议将totalItemscheckedItems分解为独立变量:

    javascript 复制代码
    // 更好的做法
    const totalItems = $('.checkbox-item').length;
    const checkedItems = $('.checkbox-item:checked').length;
    
    // 而不是
    let selectionStatus = {
        total: $('.checkbox-item').length,
        checked: $('.checkbox-item:checked').length
    };

    这样分解的好处包括:

    • 变量命名更清晰,一目了然

    • 减少嵌套层次,提高代码可读性

    • 便于单独修改或复用某个值

    • 关于变量声明,应遵循以下原则:

    • 优先使用const声明不会重新赋值的变量

    • 只在需要重新赋值时使用let

    • 避免使用var

    javascript 复制代码
    // 推荐
    const PI = 3.14159;
    let counter = 0;
    
    // 不推荐
    var total = 100;

    这样做的优势:

    • const强制不可变性,减少意外修改的风险
    • 块级作用域(block scoping)比var的函数作用域更合理
    • 有助于静态代码分析工具检测潜在错误
  3. 性能考虑

    • 在jQuery中实现事件委托的最佳实践是使用$(document).on('click', '.singleSelector', function(){...})这种方式。这种做法的优势在于:

    • 事件委托机制:

    • 将事件监听绑定在document对象上

    • 通过事件冒泡捕获目标元素的事件

    • 能够自动处理后续动态添加的DOM元素

    • 相比直接绑定更节省内存资源

    • 选择器使用建议:

    • 对于复选框选中状态的检测,推荐使用:checked选择器

    • 示例代码:$('input[type="checkbox"]:checked').length

    • 这种选择器经过jQuery优化,执行效率高

    • 特别适合处理中小规模页面(100-1000个元素)的场景

    • 性能优化提示:

    • 避免过度使用document作为委托容器

    • 尽可能选择最近的静态父元素作为委托目标

    • 复杂页面建议结合事件命名空间管理

    • 大量元素时考虑虚拟滚动等优化方案

    • 典型应用场景:

    • 动态加载的列表项点击事件

    • 表格行选中状态统计

    • 分页内容的事件绑定

    • 通过AJAX新增的DOM元素交互

    • 注意:虽然这种方案在大多数情况下表现良好,但在超大规模页面(上万元素)中可能需要考虑更专业的事件管理方案。

  4. 调用示例

    • 保持原调用方式,确保兼容性。您可以根据实际页面元素调整选择器参数。

如果您的页面有大量复选框(如超过100个),建议进一步优化性能,例如缓存选择器结果。但当前代码已足够高效。如有其他需求,请提供更多细节!

相关推荐
奔跑的呱呱牛11 小时前
generate-route-vue基于文件系统的 Vue Router 动态路由生成工具
前端·javascript·vue.js
柳杉12 小时前
从动漫水面到赛博飞船:这位开发者的Three.js作品太惊艳了
前端·javascript·数据可视化
TON_G-T12 小时前
day.js和 Moment.js
开发语言·javascript·ecmascript
Irene199113 小时前
JavaScript 中 this 指向总结和箭头函数的作用域说明(附:call / apply / bind 对比总结)
javascript·this·箭头函数
2501_9219308313 小时前
ReactNative项目OpenHarmony三方库集成实战:react-native-appearance(更推荐自带的Appearance)
javascript·react native·react.js
还是大剑师兰特13 小时前
Vue3 中 computed(计算属性)完整使用指南
前端·javascript·vue.js
csdn_aspnet13 小时前
查看 vite 与 vue 版本
javascript·vue.js
兆子龙13 小时前
前端工程师转型 AI Agent 工程师:后端能力补全指南
前端·javascript
前端大波14 小时前
Web Vitals 与前端性能监控实战
前端·javascript