0

0

实现鼠标悬停自动加载数据的完整教程

碧海醫心

碧海醫心

发布时间:2026-02-11 10:11:32

|

945人浏览过

|

来源于php中文网

原创

实现鼠标悬停自动加载数据的完整教程

本文详解如何将原本依赖点击/选中触发的数据加载逻辑,改为通过 mouseenter(鼠标悬停)事件实时获取并填充表单数据,提升交互效率与用户体验。

在实际业务场景中(如动态费用单、多行服务项录入表),用户常需快速比对相似条目(如不同科室/项目的收费标准)。此时,若仍依赖“先输入→再点击下拉选项→最后触发加载”,操作链路长、反馈滞后。更优解是:当鼠标悬停于搜索输入框(.sear)时,自动发起请求,预加载匹配数据并展示关键字段(如费用、描述、部门等),让用户无需点击即可直观感知差异。

✅ 核心改造思路

原代码使用 jQuery UI Autocomplete 的 select 事件(需用户主动选择)触发数据加载。现将其替换为 mouseenter + 防抖 + 条件触发 的组合策略:

蓝色大气通用企业公司网站2.0
蓝色大气通用企业公司网站2.0

蓝色大气通用企业公司网站源码,这是一款采用经典的三层结构,可以动态、伪静态模式,后台功能实用,界面大气,无限级分类,单篇栏目添加等的企业网站源码,比较适合二次开发或者企业自用,感兴趣的可以下载看一下啊。网站源码完整,后台是我作为程序员多年认为最为好用的一款后台,有时间我将发布更多的模板供大家下载使用,数据库为ACCESS,如需MSSQL数据库可与我联系。功能介绍:【新闻文章管理】可以发布公司新闻和

下载
  • ✅ 悬停即查:监听 .sear 元素的 mouseenter;
  • ✅ 智能触发:仅当输入内容 ≥ 2 字符时发起请求(避免空搜/单字泛滥);
  • ✅ 防重复请求:使用 data('loading', true) 标记防抖,避免快速划过多个输入框导致并发请求;
  • ✅ 保留原有结构:不改动 HTML 表单结构与后端接口(getDetails.php),平滑迁移。

?️ 实施代码(替换原

$(document).ready(function() {
    // 【关键修改】移除原有的 .sear keydown + autocomplete 绑定
    // 改为使用 mouseenter + 防抖 + 条件加载
    $(document).on('mouseenter', '.sear', function() {
        const $input = $(this);
        const id = $input.attr('id');
        const splitid = id.split('_');
        const index = splitid[1];

        // 防重复触发:已加载或正在加载则跳过
        if ($input.data('loaded') || $input.data('loading')) return;

        const query = $.trim($input.val());
        if (query.length < 2) return; // 至少2字符才查

        $input.data('loading', true);

        // 发起悬停查询(复用原 getDetails.php 接口)
        $.ajax({
            url: 'getDetails.php',
            type: 'POST',
            dataType: 'json',
            data: { search: query, request: 1 },
            success: function(data) {
                if (data && data.length > 0) {
                    // 取第一个匹配项(可按需调整排序逻辑)
                    const item = data[0];
                    $('#fee_' + index).val(item.fee || '');
                    $('#description_' + index).val(item.description || '');
                    $('#office_' + index).val(item.office || '');
                    $('#amount_' + index).val(item.amount || '');
                    $('#quantity_' + index).val(item.qty || '');
                    $('#subtotal_' + index).val((parseFloat(item.amount || 0) * parseFloat(item.qty || 0)).toFixed(2));

                    // 标记已加载,避免重复填充
                    $input.data('loaded', true);
                }
            },
            error: function() {
                console.warn('Hover fetch failed for:', id);
            },
            complete: function() {
                $input.data('loading', false);
            }
        });
    });

    // 【可选增强】悬停离开时清除“已加载”标记(便于内容变更后重新加载)
    $(document).on('mouseleave', '.sear', function() {
        $(this).removeData('loaded');
    });

    // 后续其他逻辑(addmore/delete/计算)保持不变...
});

⚠️ 注意事项与最佳实践

  • 性能优化:mouseenter 易高频触发,务必添加 loading 状态锁和最小字符限制,否则可能造成大量无效请求。
  • 用户体验平衡:悬停加载适合“轻量级预览”,若后端响应慢(>300ms),建议增加 loading 提示(如在输入框右侧加 )。
  • 数据一致性:当前方案默认取首个匹配项。若需支持多结果悬停预览,应改用 autocomplete 的 focus 事件(聚焦下拉项时加载),而非 mouseenter。
  • 移动端兼容性:mouseenter 在触摸设备上无意义,生产环境建议结合 focusin 事件做 fallback:
    $(document).on('mouseenter focusin', '.sear', function() { ... });
  • 后端配合:确保 getDetails.php?request=1 返回的 JSON 包含完整字段(fee, description, office, amount, qty),与前端赋值键名严格一致。

✅ 总结

将“点击选择后加载”升级为“悬停即查”,本质是把用户意图识别前置——从「显式操作」转向「隐式感知」。本文提供的方案零侵入修改现有 DOM 与后端,仅通过事件绑定策略调整,即可显著提升多行表单的数据比对效率。实际部署前,请务必在真实网络条件下测试响应延迟,并根据业务需求决定是否启用防抖延时(如 setTimeout 延迟 200ms 触发)以进一步优化体验。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

436

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

543

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

153

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

403

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

508

2023.12.04

包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法

本专题汇总了包子漫画官网和网页版入口,提供最新章节抢先看方法、正版免费阅读指南,以及稳定访问方式,帮助用户快速直达包子漫画页面,无广告畅享全集漫画内容。

132

2026.02.10

热门下载

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

精品课程

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

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