控制select为readonly状态

本文介绍两种方法实现网页上的select控件不可编辑:一种直接在HTML标签中添加事件监听;另一种通过JavaScript统一设置页面上所有input、select和textarea元素为只读状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单说两种方式,实质是一样的,一种简介明了,一种稍显复杂

实质都是用:

onmousemove="this.setCapture();" onmouseout="this.releaseCapture();" onfocus="this.blur();"

这句代码来控制用户无法选择和更改该控件的值

 

一、先说简单的(平时都用简单的,但是有大量select控件需要做readonly处理时用复杂的更简单)

<select  onmousemove="this.setCapture();" onmouseout="this.releaseCapture();" onfocus="this.blur();">

<option selected >aaa</option>

<option>bbb</option>

</select>   

二、贴一个复杂的,就是把变化放入js,来实现而已,多时候有用,另外只在脚本控制时候用

该方法转自优快云博客,http://blog.youkuaiyun.com/lengyueqinghui/archive/2009/08/18/4457660.aspxfunction

// set all input/select/textarea readonly  

function allReadonly(){  

    // input readonly  

    var inputEle = document.getElementsByTagName("input");  

    for(var i=0; i<inputEle.length; i++){  

        inputEle[i].setAttribute("readonly","true",0);  

        inputEle[i].onclick = function setClickFalse(){return false;}  

        inputEle[i].onfocus = function setFocusFalse(){return false;}  

        inputEle[i].onblur = function setBlurFalse(){return false;}  

    }  

    // select readonly  

    var selectEle = document.getElementsByTagName("select");  

    for(var i=0; i<selectEle.length; i++){  

        setReadOnly(selectEle[i]);  

    }  

    // textarea readonly  

    var textareaEle = document.getElementsByTagName("textarea");  

    for(var i=0; i<textareaEle.length; i++){  

        textareaEle[i].setAttribute("readonly","true",0);  

    }  

}  

 

// select readonly  

function setReadOnly(obj){  

    obj.onmouseover = function(){  

        obj.setCapture();  

    }  

    obj.onmouseout = function(){  

        obj.releaseCapture();  

    }  

    obj.onfocus = function(){  

        obj.blur();  

    }  

    obj.onbeforeactivate = function(){  

        return false;  

    }   

}  

 

// select readonly rollback  

function rollBack(obj){  

    obj.onmouseover = function(){  

    }  

    obj.onmouseout = function(){  

    }  

    obj.onfocus = function(){  

    }  

    obj.onbeforeactivate = function(){  

    }   

}

在 ClickHouse 中,若需要将某个表设置为只读状态,可以通过修改表的配置或文件系统权限来实现。以下是几种常见的方法: ### 方法一:使用 `ALTER TABLE ... MODIFY SETTING` 设置只读 ClickHouse 支持通过修改表的设置来限制写入操作。可以使用以下语句将表设置为只读模式: ```sql ALTER TABLE table_name MODIFY SETTING readonly = 1; ``` 此设置会阻止对表执行任何写入操作(如 `INSERT`、`DELETE`、`ALTER TABLE ... ADD COLUMN` 等),但允许执行查询操作。需要注意的是,该设置在表重新加载(重启服务或重新加载表)后仍然有效[^1]。 ### 方法二:通过文件系统权限控制 对于使用本地存储引擎(如 `MergeTree`)的表,ClickHouse 将数据存储在文件系统中。可以手动更改表数据目录的权限,使其不可写。例如,在 Linux 系统中,可以使用以下命令: ```bash chmod -w /var/lib/clickhouse/data/database_name/table_name ``` 这种方式会直接限制操作系统层面对该表数据目录的写入权限,适用于需要长期保持只读状态的表。需要注意的是,这会影响所有尝试写入该表的操作,包括后台合并等操作,可能导致服务异常[^1]。 ### 方法三:使用用户权限管理 通过设置用户权限来限制对特定表的写入操作。可以使用以下语句限制某个用户对表的写入权限: ```sql REVOKE INSERT, ALTER ON database_name.table_name FROM user_name; ``` 此方法适用于多用户环境,允许管理员灵活控制不同用户的访问权限,而无需修改表本身的设置或文件系统权限。需要注意的是,该权限控制仅适用于通过 SQL 接口进行的操作,无法阻止通过文件系统直接修改数据的情况[^1]。 ### 方法四:使用视图替代原始表 如果表主要用于查询操作,可以考虑将原始表设置为只读,并创建一个视图供用户查询。例如: ```sql CREATE VIEW view_name AS SELECT * FROM original_table; ``` 然后,将用户访问权限授予视图而非原始表。这种方法可以有效隔离写入操作,同时保持查询灵活性。需要注意的是,视图本身不存储数据,因此不会影响原始表的性能或存储结构。 ### 方法五:使用 `ATTACH` 命令重新加载只读表 如果希望将某个表在加载时即为只读状态,可以在配置文件中定义该表为只读,或在运行时使用 `ATTACH` 命令加载表时指定只读标志。例如: ```sql ATTACH TABLE table_name READONLY; ``` 此方法适用于需要在加载阶段即限制写入的场景,确保表在整个生命周期内保持只读状态。需要注意的是,该设置在表重新加载后仍然有效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值