0

0

如何使用 jQuery 动态勾选 Laravel 渲染的复选框

霞舞

霞舞

发布时间:2026-03-05 18:30:11

|

761人浏览过

|

来源于php中文网

原创

如何使用 jQuery 动态勾选 Laravel 渲染的复选框

本文详解如何在 Laravel + jQuery 的 Ajax 场景中,根据后端返回的学生 ID 动态勾选对应复选框(ID 格式为 student-{id}),避免常见模板变量误用与 DOM 操作错误。

本文详解如何在 laravel + jquery 的 ajax 场景中,根据后端返回的学生 id 动态勾选对应复选框(id 格式为 `student-{id}`),避免常见模板变量误用与 dom 操作错误。

在 Laravel 表单中动态操作复选框(如扫码搜索后自动勾选对应学生)是一个高频需求,但极易因混淆服务端渲染逻辑与客户端运行时逻辑而失败。核心难点在于:不能在 JavaScript 中直接使用 Blade 语法 {{ $student->id }} 获取 Ajax 响应后的数据——该语法仅在页面首次渲染时由 PHP 执行,而 Ajax 返回的是纯 JSON 数据,需在 response.json() 后通过 JavaScript 动态解析。

以下是完整、健壮的实现方案:

✅ 正确的前端处理逻辑

将原始代码中错误的 data = "{{ $student->id }}"; 和无效的 $("#student-.data") 移除,改为在获取 JSON 响应后遍历 data.students 数组,并使用 jQuery 的属性选择器精准定位并勾选复选框:

form.addEventListener('submit', function (e) {
    e.preventDefault();

    const token = document.querySelector('meta[name="csrf-token"]').content;
    const url = this.getAttribute('action');
    const q = document.getElementById('q').value;

    fetch(url, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'X-CSRF-TOKEN': token
        },
        body: JSON.stringify({ q })
    })
    .then(response => {
        if (!response.ok) throw new Error('Network response was not ok');
        return response.json();
    })
    .then(data => {
        // ✅ 关键:遍历后端返回的 students 数组,逐个勾选
        data.students.forEach(student => {
            const checkboxId = `#student-${student.id}`;
            const $checkbox = $(checkboxId);
            if ($checkbox.length) {
                $checkbox.prop('checked', true);
                console.log(`✅ Checked checkbox for student ID: ${student.id}`);
            } else {
                console.warn(`⚠️  Checkbox not found: ${checkboxId}`);
            }
        });

        // 可选:清空并展示搜索结果(如姓名)
        const etudiant = document.getElementById('etudiant');
        etudiant.innerHTML = '';
        data.students.forEach(student => {
            const span = document.createElement('span');
            span.textContent = `${student.first_name} ${student.last_name}`;
            etudiant.appendChild(span);
        });
    })
    .catch(error => {
        console.error('❌ Search failed:', error);
        alert('搜索失败,请检查网络或输入内容');
    });
});

✅ 后端响应需确保结构清晰

Laravel 控制器必须返回标准、可预测的 JSON 结构。原始代码中 return response()->json(["students" => $students]); 是正确的,但建议补充数据存在性校验与字段精简(避免敏感信息泄露):

// app/Http/Controllers/StudentController.php
public function search_codebar(Request $request): JsonResponse
{
    $q = $request->input('q');

    $students = Student::where('uuid', 'like', "%{$q}%")
        ->select('id', 'first_name', 'last_name', 'uuid') // 显式指定字段
        ->get();

    return response()->json([
        'success' => true,
        'students' => $students,
        'count' => $students->count()
    ]);
}

? 注意:where('uuid', 'like', $q) 应改为 '%'.$q.'%' 或使用 whereUuid($q)(若数据库支持 UUID 精确匹配),避免因通配符缺失导致查不到数据。

✅ Blade 模板中复选框 ID 必须严格一致

确保每个复选框的 id 属性格式为 student-{id},且 id 值为整数(Laravel 默认主键类型):

@foreach ($students as $student)
<tr>
    <td>{{ $student->last_name }}</td>
    <td>{{ $student->first_name }}</td>
    <td>{{ $student->uuid }}</td>
    <td>
        <!-- ✅ 正确:id 唯一、格式固定、无空格/特殊字符 -->
        <input 
            type="checkbox" 
            name="students[]" 
            value="{{ $student->id }}" 
            id="student-{{ $student->id }}" 
            class="form-check-input"
        >
    </td>
</tr>
@endforeach

⚠️ 常见错误与规避指南

错误示例 问题说明 正确做法
data = "{{ $student->id }}"; Blade 变量在页面加载时即被替换为某个静态 ID(如 "123"),无法响应 Ajax 动态结果 完全移除此行,改用 data.students[i].id
$("#student-.data") 语法错误:.data 是 JS 变量,但未拼接;且 . 在 CSS 选择器中表示 class 使用模板字符串:$(\#student-\${student.id}`)`
未检查 $checkbox.length 若搜索到不存在的学生 ID,会静默失败 增加 if ($checkbox.length) 判断并提供日志反馈
CSRF Token 获取方式不兼容 document.querySelector('meta[name="csrf-token"]') 在多语言/多布局场景可能失效 推荐统一在 app.js 中全局设置:$.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}});

✅ 总结

动态勾选复选框的本质是:服务端返回真实数据 → 客户端解析 JSON → 构造合法 DOM ID → 安全执行 .prop('checked', true)。切勿将服务端模板逻辑(Blade)与客户端异步逻辑(JavaScript)混用。遵循上述结构,即可稳定实现“扫码即选中”的交互体验,同时具备良好的可维护性与错误容错能力。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

339

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

290

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

708

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

384

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

135

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

82

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

75

2025.08.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

61

2026.03.04

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Laravel---API接口
Laravel---API接口

共7课时 | 0.6万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号