PHP: establezca la longitud del texto en la base de datos y limite la longitud del texto frontal a través de js. Extensiones: Restricciones de tipos de datos

 representaciones

 Como se muestra en la figura anterior: cuando la duración de la prueba 111 exceda el límite en la base de datos, se dará un aviso y la parte redundante se cortará automáticamente

Código 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>

Código de implementación de la función 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>

Extensiones: Restricciones de tipos de datos

Limite int, varchar, datetime por defecto

realización de funciones

<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> 

Nota: El selector de tiempo aparecerá aquí y no se puede mostrar inmediatamente. Se debe hacer clic dos veces para que aparezca . Solución:

 Coloque WdatePicker()el método en una función separada y llame a esa función después de comparar los valores de la base de datos.

el código

Cómo implementar un complemento de tiempo

function showDatePicker(inputId) {
    var inputElement = document.getElementById(inputId);
    WdatePicker();
    // 其他处理逻辑...
}

 Después de la comparación, ejecute showDatePicker(clickedDivId); proporcione el valor del div correspondiente a este método.

if (targetItem) {
    //如果找到了对应的值,就进行赋值
    //长度
    targetLength = targetItem.length;
    targetType = targetItem.type;
    // console.log('Found type:', targetType);
    //如果数据类型是时间
    if(targetType==='datetime'){
        showDatePicker(clickedDivId); // 调用 showDatePicker() 函数
        // inputElement.setAttribute('onclick', 'WdatePicker()'); // 给输入框增加自定义的触发事件
    }
} 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_46001736/article/details/131572701
Recomendado
Clasificación