PHP:数据库中设置文本长度,通过js去限制前台文本长度。扩展:数据类型的限制

news2024/12/25 10:29:35

 效果图

 如上图:当测试111的长度超过数据库中限制的长度,进行提示,并且自动将多余部分截掉

HTML代码

<!-- 附加属性 -->
<div class="text-nav-1 " id="append1">  
    <div >append1</div>
    <input type="text"   autocomplete="off"  name="append1" value="<?= $_POST['append1'] ?>" /> 
</div>
<div class="text-nav-1 " id="append2">  
    <div >append2</div>
    <input type="text"   autocomplete="off"  name="append2" value="<?= $_POST['append2'] ?>" /> 
</div>
<div class="text-nav-1 " id="append3">  
    <div >append3</div>
    <input type="text"   autocomplete="off"  name="append3" value="<?= $_POST['append3'] ?>" /> 
</div>
<div class="text-nav-1 " id="append4">
    <div >append4</div>
    <input type="text"   autocomplete="off"  name="append4" value="<?= $_POST['append4'] ?>" />
</div>
<div class="text-nav-1 " id="append5">  
    <div >append5</div>
    <input type="text"   autocomplete="off"  name="append5" value="<?= $_POST['append5'] ?>" /> 
</div>

JS功能实现代码

<script type="text/javascript">
    window.onload=function(){
        <?php
        $sql1 = "SELECT * FROM attribute where is_show = 'Y'and table_name = 'customers'";
        $result1 = DB_query($sql1, $db);
        // 检查查询结果是否为空
        if (DB_num_rows($result1) > 0) {
            // 初始化一个空数组来存储查询结果
            $data = array();
            // 遍历查询结果并将每行数据存入数组中
            while ($row = DB_fetch_array($result1)) {
                $data[] = $row;
            }
        } else {
            echo "没有结果";
        }
        ?> 
        //给数据库输出的数组赋值
        var data = <?php echo json_encode($data); ?>;
        // console.log(data)
        //设置长度
        // 获取所有具有以 "append" 开头的 id 属性的 <div> 元素
        var divElements = document.querySelectorAll("div[id^='append']");
        // 遍历每个 <div> 元素
        divElements.forEach(function(divElement) {
            // 获取当前 <div> 元素下的 <input> 元素
            var inputElement = divElement.querySelector("input");       
            // 添加 onclick 事件监听器
            //设置长度的全局变量targetLength
            var targetLength = '';
            divElement.onclick = function(event) {
                //获取指定的id值
                var clickedDivId = event.currentTarget.id;
                // 根据点击的 div 的 ID 值查找对应的 length 值
                //对最开始查询的数据库数组进行处理
                var targetItem = data.find(function(item) {
                    //让数据库中的colum_name的值和指定的id的值相等
                    return item.column_name.toString() === clickedDivId;
                });
                // 判断是否找到匹配的项
                if (targetItem) {
                    //如果找到了对应的值,就进行赋值
                    targetLength = targetItem.length;
                    // console.log('Found length:', targetLength);
                } else {
                    console.log('ID not found');
                }
                // 在点击 <div> 时,将焦点设置到对应的 <input> 元素,执行失去焦点方法
                inputElement.focus();
            }
            
            // 添加 onblur 事件监听器
            inputElement.onblur = function() {
                //输出长度的值
                // console.log(targetLength)
                //判断当前长度和数据库中获取的长度的值
                if (this.value.length > targetLength) {
                    alert('超出长度限制!'); // 显示提示信息
                    this.value = this.value.slice(0, targetLength); // 截断超出长度的文本
                }
            };
        });
    }
</script>

扩展:数据类型的限制

默认对int,varchar,datetime进行限制

功能实现

<script type="text/javascript">
    window.onload=function(){
        <?php
        $sql1 = "SELECT * FROM attribute where is_show = 'Y'and table_name = 'customers'";
        $result1 = DB_query($sql1, $db);
        // 检查查询结果是否为空
        if (DB_num_rows($result1) > 0) {
            // 初始化一个空数组来存储查询结果
            $data = array();
            // 遍历查询结果并将每行数据存入数组中
            while ($row = DB_fetch_array($result1)) {
                $data[] = $row;
            }
        } else {
            echo "没有结果";
        }
        ?> 
        //给数据库输出的数组赋值
        var data = <?php echo json_encode($data); ?>;
        // console.log(data)
        //设置长度和数据类型
        // 获取所有具有以 "append" 开头的 id 属性的 <div> 元素
        var divElements = document.querySelectorAll("div[id^='append']");
        // 遍历每个 <div> 元素
        divElements.forEach(function(divElement) {
            // 获取当前 <div> 元素下的 <input> 元素
            var inputElement = divElement.querySelector("input");       
            // 添加 onclick 事件监听器
            //设置长度的全局变量targetLength
            var targetLength = '';
            //设置数据类型的全局变量targetType
            var targetType = '';
            divElement.onclick = function(event) {
                //获取指定的id值
                var clickedDivId = event.currentTarget.id;
                //根据点击的 div 的 ID 值查找对应的 length值 和 type值
                //对最开始查询的数据库数组进行处理
                var targetItem = data.find(function(item) {
                    //让数据库中的colum_name的值和指定的id的值相等
                    return item.column_name.toString() === clickedDivId;
                });
                // 判断是否找到匹配的项
                if (targetItem) {
                    //如果找到了对应的值,就进行赋值
                    //长度
                    targetLength = targetItem.length;
                    targetType = targetItem.type;
                    // console.log('Found type:', targetType);
                    //如果数据类型是时间
                    if(targetType==='datetime'){
                        inputElement.setAttribute('onfocus', 'WdatePicker()'); // 给输入框增加自定义的触发事件
                    }
                } else {
                    console.log('ID not found');
                }
                // 在点击 <div> 时,将焦点设置到对应的 <input> 元素,执行失去焦点方法
                inputElement.focus();
            }
            // 添加 onblur 事件监听器
            inputElement.onblur = function() {
                //输出长度的值
                // console.log(targetLength)
                //判断当前长度和数据库中获取的长度的值
                if (this.value.length > targetLength) {
                    alert('超出长度限制!'); // 显示提示信息
                    this.value = this.value.slice(0, targetLength); // 截断超出长度的文本
                }
                //数据类型的限制
                //当前文本框中的数据类型
                var inputValue = this.value;
                // console.log("当前:"+typeof inputValue+"数据库:"+targetType)
                // 根据数据库中的字段类型信息进行数据类型判断
                if (targetType === 'int' && !isNumeric(inputValue) && inputValue != '') {
                    alert('请输入有效的数字!'); // 显示类型不匹配的提示信息
                    this.value = ''; // 清空输入框的值
                    inputElement.removeAttribute('onfocus'); // 移除输入框的触发事件
                }
                else if (targetType === 'varchar' && typeof inputValue !== 'string' && inputValue != '') {
                    alert('请输入有效的字符串!'); // 显示类型不匹配的提示信息
                    this.value = ''; // 清空输入框的值
                    inputElement.removeAttribute('onfocus'); // 移除输入框的触发事件
                }
                else if (targetType === 'datetime') {
                    // inputElement.setAttribute('onfocus', 'WdatePicker()'); // 给输入框增加日期选择器的触发事件
                    //判断输入的值是否是时间格式
                    if (targetType === 'datetime' && !isDateFormat(inputValue) && inputValue != ''){
                        alert('请输入有效的时间!'); // 显示类型不匹配的提示信息
                        this.value = ''; // 清空输入框的值
                    }
                } else {
                    inputElement.removeAttribute('onfocus'); // 移除输入框的触发事件
                }
            };
        });
        // 自定义函数,用于判断一个字符串是否为有效的数字
        function isNumeric(value) {
            return /^-?\d+(\.\d+)?$/.test(value);
        }
        //自定义函数,用于判断是否是时间
        function isDateFormat(value) {
            // 正则表达式匹配 XXXX-XX-XX 格式的日期
            var dateRegex = /^\d{4}-\d{2}-\d{2}$/;
            return dateRegex.test(value);
        }
    }
</script> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使经纬度标注在图框内部

在生成经纬网格之后&#xff0c;如果标注了经纬度&#xff0c;仔细查看图框边缘&#xff0c;可以看到标注的经纬度出现在了图框的外面&#xff0c;这样显得不是很美观&#xff0c;我们可以通过偏移的方法让其回到图框内部&#xff0c;这里为大家介绍一下具体的操作方法&#xf…

达梦数据库 SQL交互式查询工具打不开问题处理

目录 1、开始菜单找到 “SQL交互式查询工具”。 2、 右键进入 打开文件位置。 3、右键进入属性&#xff0c;找到目标位置 4、进入我的电脑&#xff0c;访问该地址&#xff0c;并授予此地址权限 1、开始菜单找到 “SQL交互式查询工具”。 2、 右键进入 打开文件位置。 3、右…

【ARM Coresight 及 DS-5 介绍 2 - ARM Coresight 介绍】

文章目录 1.1 ARM Coresight 介绍1.1.1 ARM Coresight 发展历史 1.2 ARM Coresight 框架介绍1.1.1 Trace 通路1.1.3 Debug 通路1.1.4 Trigger 通路 1.1 ARM Coresight 介绍 ARM Coresight是ARM公司提供的一种调试和跟踪技术&#xff0c;用于ARM处理器的调试和性能分析。它通过…

根据ABAP字符寻找程序

知识来之不易&#xff0c;还请多点赞&#xff01; SE38执行程序RPR_ABAP_SOURCE_SCAN

实现流程化办公,该说不说还得借力低代码开发框架

在科技的推动下&#xff0c;流程化办公已经成为潮流。如何实现流程化办公&#xff0c;让越来越多的企业打通各部门之间的协作&#xff0c;实现高效率发展&#xff1f;借力低代码开发框架&#xff0c;让那遥不可及的梦想变为现实&#xff0c;跟传统操作方式比起来&#xff0c;低…

Pandas库如何在导出表格的时候去掉索引列(隐藏索引列)

import pandasdata {sku1:[1,2,3],sales:[11,22,33], } doc pandas.DataFrame(data)file_path rC:\Users\Zhao\Desktop\test1.xlsx doc.to_excel(file_path,indexFalse) # indexFalse 可以隐藏 索引列

从php5.6到golang1.19-文库App性能跃迁之路

作者 | 百度文库App 导读 本文深入浅出地分享了百度文库App服务端技术栈从PHP迁移至Go的实战经验&#xff0c;包含了技术选型、基础建设、流量迁移的具体方案&#xff0c;以及核心项目案例的重构实践。 全文6209字&#xff0c;预计阅读时间16分钟。 01 动机 长期以来&#xff…

异地使用PLSQL远程连接访问Oracle数据库【内网穿透】

文章目录 前言1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射 3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程Oracle 转载自cpolar极点云文章&#xff1a;公网远程连接…

【036】读懂C++的强制类型转换static_cast、const_cast、dynamic_cast以及reinterpret_cast

C的强制类型转换 引言一、类型转换简介二、上行、下行转换的概述三、static_cast 静态类型转换四、dynamic_cast 静态类型转换&#xff08;推荐使用&#xff09;五、const_cast 常量转换六、reinterpret_cast 重新解释转换&#xff08;最不安全&#xff09;总结 引言 &#x1f…

微信支付(一):小程序支付(go+gin+内网穿透)

一、前置条件 &#xff08;1&#xff09;go语言&#xff0c;1.18 &#xff08;2&#xff09;Gin、第三方依赖包&#xff1a;gopay【github.com/go-pay/gopay/alipay】https://github.com/go-pay/gopay/blob/main/doc/wechat_v3.md &#xff08;3&#xff09;微信支付相关信息…

Ubuntu安装:显卡驱动、CUDA、Anaconda

Ubuntu安装&#xff1a;显卡驱动、CUDA、Anaconda 摘要1.安装NVIDIA显卡驱动2.安装CUDA3.安装Anaconda Windows环境安装CUDA和Pytorch见&#xff1a;Pytorch入门&#xff1a;3.安装 环境&#xff1a;x86_64 Linux ubuntu18 4.150.0-20-generic 摘要 本篇博客对Ubuntu系统安装…

#消防知识#自动灭火系统是什么?

自动灭火系统是指能够在发生火灾时自动检测、控制和扑灭火灾的系统&#xff0c;包括自动喷水灭火系统、气体灭火系统、干粉灭火系统、气溶胶灭火系统等。不同的自动灭火系统有不同的组成部件、工作原理和适用范围&#xff0c;以下是一些简要的介绍&#xff1a;• 自动喷水灭火系…

汽车远程升级(OTA)定义与技术体系

1.汽车OTA定义 1.1. OTA概述 OTA&#xff08;Over-the-air technology&#xff09;是一种通过无线方式而不是使用电缆或其他本地连接进行数据传输的远程升级。能够实现对现有性能/功能的优化、新功能推送等。OTA技术最早应用于PC&#xff0c;而后在手机上普及&#xff0c;终结…

Go语言程序设计(二)常量、变量、布尔类型与运算符

一、常量、变量与命名规则 常量使用关键字const声明&#xff1b;变量可以使用关键字var声明&#xff0c;也可以使用快捷变量声明语法。Go语言可以自动推断出所声明变量的类型&#xff0c;但是如果需要显式指定其类型也是合法的&#xff0c;比如声明一种与Go语言的常规推断不同的…

途乐证券|沪指缩量跌0.69%,汽车等板块走弱,稀土概念逆市活跃

6日早盘&#xff0c;三大股指股指盘中震动回落&#xff0c;科创50指数逆市上扬&#xff1b;两市半日成交超5000亿元&#xff0c;北向资金小幅净流出。 到午间收盘&#xff0c;沪指跌0.53%报3205.97点&#xff0c;深成指跌0.39%&#xff0c;创业板指跌0.61%&#xff0c;科创50指…

新版 Alist + RaiDrive 挂载阿里云盘 Open 到本地,实现网盘本地化

新版 Alist RaiDrive 挂载阿里云盘 Open 到本地&#xff0c;实现网盘本地化 1. 下载 Alist 和 RaiDrive2. 配置 Alist3. 填写挂载路径和刷新令牌4. 获取刷新令牌5. 使用 RaiDrive 挂载 1. 下载 Alist 和 RaiDrive 下载地址&#xff1a;Alist RaiDrive 安装 提取码: qu38 Al…

XXX SAP系统中支持XX动力替代件功能(投稿数字化月报三)

XXX集团、XX动力、XXX汽车IT组成替代件开发小组&#xff0c;快速高效完成XX动力替代件业务需求。提供从XX动力的PLM系统中开发新增含有替代件功能的BOM物料清单、在XXX汽车SAP系统中启用替代件功能、再到现场替换件业务执行的全套解决方案。 在BOM上体现出物料的替换关系&#…

汽车电子—制作DBC文件

文章目录 一、前期准备二、新建DBC文件三、添加报文&#xff08;Msg&#xff09;四、添加信号4.1 大小端模式4.2 创建数值表4.3 添加信号 五、关联信号和报文六、设置报文发送类型和周期七、编辑通信矩阵 一、前期准备 首先需要安装制作DBC文件的软件&#xff0c;这里使用的是…

计算机网络概述(二)

计算机网络的定义 计算机网络并没有一个统一的定义&#xff0c;不同阶段是有不同的定义。 最简单的定义&#xff1a;计算机网络是一些互联的&#xff0c;自治的计算机集合。互联&#xff1a;指计算机之间可以通过有线或无线的方式进行数据通信&#xff1b;自治指的是独…

MySQL_01删除主键索引

文章目录 添加主键索引删除主键索引 添加主键索引 alter table 表名 add primary key(字段名)删除主键索引 -- 如果这个主键是自增的&#xff0c;先取消自增长 alter table 表名 modify 字段 int; alter table 表名 drop primary key;