js 注册控件的onclick事件
今天做了一个全选功能:
1.点击全选,全部选中。选中状态再点击全选,全部取消选中
2.点击成员,判断是否成员全部选中,true:全选为选中状态,false:全选为未选中状态。
使用js是比较麻烦的就是如何获取到成员对象集合,首先我们了解到获取控件的方法有几种:
1.document.getElementById("控件ID") 获取指定的控件,因为根据HTML规范中ID是具有唯一性的。注意:在获取ASP.Net控件的ID时,使用<%=控件ID.ClientID%>
2.document.getElementsByName("控件Name") 获取控件的集合,因为不同的控件可以设置同一个Name。注意:在获取ASP.Net控件的name时,我们却找不到我们设置的Name,原因是服务器控件在编译之后会生成HTML控件时会重新对控件ID和Name赋值。所以我们自己写的Name就没有起到作用了。
3.document.getElementsByTagName("Html的标签") 获取控件的集合。
由从上面分析可以得出:
1.能让服务器控件的Name能不自动生成,就可以使用document.getElementsByName()方法
2.就是使用document.getElementsByTagName("Html的标签")
因为document中没有根据Class获取控件的方法,我们就使用getElementsByTagName()方法创建一个根据Class获取控件的方法
function getElementsByClassName(className) {
var classElements = []
allElements = document.getElementsByTagName("*");
for (var i = 0; i < allElements.length; i++) {
if (allElements[i].className == className) {
classElements[classElements.length] = allElements[i];
}
}
return classElements;
}
页面代码:
<table id="tblRole" cellpadding="0" cellspacing="0">
<tr>
<td style=" padding:0px; border:0px;">
<asp:CheckBox ID="chkAll" runat="server" Onclick="isChkAll(this,'chkAllSearchManager')" /></td>
<td style=" padding:0px; border:0px;">
<label for="<%=chkAll.ClientID %>">
全て</label></td>
<td style=" padding:0px; border:0px;">
<asp:CheckBox ID="chkResolution" CssClass="role" runat="server" /></td>
<td style=" padding:0px; border:0px;">
<label for="<%=chkResolution.ClientID %>">
決議者</label></td>
<td style=" padding:0px; border:0px;">
<asp:CheckBox ID="chkReview" Class="role" runat="server" /></td>
<td style=" padding:0px; border:0px;">
<label for="<%=chkReview.ClientID %>">
審議者</label></td>
<td style=" padding:0px; border:0px;">
<asp:CheckBox ID="chkPMO" CssClass="role" runat="server" /></td>
<td style=" padding:0px; border:0px;">
<label for="<%=chkPMO.ClientID %>">
PMO</label></td>
<td style=" padding:0px; border:0px;">
<asp:CheckBox ID="chkOrganizer" CssClass="role" runat="server" /></td>
<td style=" padding:0px; border:0px;">
<label for="<%=chkOrganizer.ClientID %>">
主催者</label></td>
<td style=" padding:0px; border:0px;">
<asp:CheckBox ID="chkParties" CssClass="role" runat="server" /></td>
<td style=" padding:0px; border:0px;">
<label for="<%=chkParties.ClientID %>">
当事者</label></td>
<td style=" padding:0px; border:0px;">
<asp:CheckBox ID="chkParticipants" CssClass="role" runat="server" /></td>
<td style=" padding:0px; border:0px;">
<label for="<%=chkParticipants.ClientID %>">
参加者</label></td>
<td style=" padding:0px; border:0px;">
<asp:CheckBox ID="chkAllSearchManager" runat="server" ClientIDMode="Static" Onclick="isChkAll(this,'chkAllSearchManager')" /></td>
<td style=" padding:0px; border:0px;">
<label for="<%=chkAllSearchManager.ClientID %>">
管理者全件検索</label></td>
</tr>
</table>
获取到之后,我们想就应该很简单了,根据我们写的方法就可以找到了HTML控件了,然后对其做对应的操作。OK,代码:
function isChkAll(obj) {
var classRole = getElementsByClassName("role");
if (obj.checked) {
for (var i = 0; i < classRole.length; i++) {
classRole[i].checked = true;
}
}
else {
for (var i = 0; i < classRole.length; i++) {
classRole[i].checked = false;
}
}
}
当我们真的运行时,发现成员checkbox都没反应,查看代码发现我们在checkbox中加的CSSClass被放入到span标签中了。
因为我们写的是ASP.Net控件,如果是HTML控件的话会很简单的。用getElementsByName()就解决了。
function isChkAll(obj, SearchManageid) {
var classRole = getElementsByClassName("role");
if (obj.checked) {
for (var i = 0; i < classRole.length; i++) {
classRole[i].getElementsByTagName("input")[0].checked = true;
}
}
else {
for (var i = 0; i < classRole.length; i++) {
classRole[i].getElementsByTagName("input")[0].checked = false;
}
}
}
所以要用classRole[i].getElementsByTagName("input")[0]替换classRole[i],getElementsByTagName("input")获取的是含有input标签的HTML标签集合,所以要给它加下标。
上面说的那么多主要是用于点击全选的checkbox,下面说的是点击成员的checkbox。
function chkRoles(objAll) {
var roles = getElementsByClassName("role");
var isCheck = false;
var isNotCheck = false;
for (var i = 0; i < roles.length; i++) {
if (roles[i].getElementsByTagName("input")[0].checked) {
isCheck = true;
}
else {
isNotCheck = true;
}
}
if (isCheck == true) {
if (isNotCheck == false) {
objAll.checked = true;
}
else {
objAll.checked = false;
}
}
}
上面的代码效果:成员全部选中,全选checkbox为选中状态,成员有一个没选中,全选checkbox为未选中状态。方法写好了,现在我们就要把这个方法放到成员checkbox的onclick事件上去。
注册事件的方法有很多种,但大方向应该分为有参数和无参数的注册。
无参方法的注册就比较简单了
1.checkbox.onclick=cusclick;
2.checkbox.onclick=function(){}
3.checkbox.attachEvent('onclick', function(){alert('22');});//执行顺序按添加顺序的反序,先进后出
有参的方法注册:
1.checkbox.onclick=function(){chkRoles(objAll);}
2.checkbox.attachEvent('onclick', function(){chkRoles(objAll);});//执行顺序按添加顺序的反序,先进后出
页面代码:
window.onload = function () {
init();
}
function init() {
var roles = getElementsByClassName("role");
var objAll = document.getElementById("<%=chkAll.ClientID %>");
var objchkSearchManage = document.getElementById("chkAllSearchManager");
for (var i = 0; i < roles.length; i++) {
roles[i].getElementsByTagName("input")[0].onclick = function () {
chkRoles(objAll, objchkSearchManage);
}
//roles[i].getElementsByTagName("input")[0].attachEvent("onclick", chkRoles(objAll, objchkSearchManage));
}
}
js 注册控件的onclick事件的更多相关文章
- js在控件原有的事件方法中加入自己的方法
有没有碰到过这样的情况,在一个别人的页面上,你想为某个按钮加入自己的控制逻辑,满足条件的情况下才执行原有的事件方法呢? 这个时候在不能修改其原有方法的情况下,先获取控件的事件方法,并将其包装到自己的控 ...
- 利用js日期控件重构WEB功能
开发需求:网页中的日期部门(注册页面和查询条件)都用js日期控件重写 页面一:更新员工页面 empUpdate.jsp 中增加 onfocus 事件 入职日期:<input id="h ...
- Android实现监听控件点击事件
Android实现监听控件点击事件 引言 这篇文章主要想写一下Android实现监听点击事件的几种方法,Activity和Fragment实现起来有些方法上会有些不同,这里也略做介绍. 最近一直在忙一 ...
- asp.net中的ListBox控件添加双击事件
问题:在Aspx页里的ListBox A中添加双击事件,将选中项添加到另一个ListBox B中,双击ListBox B中的选中项,删除当前选中项 页面: <asp:ListBox ID=&qu ...
- C#中combobox 控件属性、事件、方法
一 .combobox 属性.事件.方法公共属性 名称 说明 AccessibilityObject 获取分配给该控件的 AccessibleObject. AccessibleDefaultActi ...
- DWZ (JUI) 教程 tree 控件的选中事件
DWZ (JUI) 教程 tree 控件的选中事件 先简单说一下流程 第一步 当然是先定义好回调事件了 function checkCallback(json){ ........... ...... ...
- 简洁JS 日历控件 支持日期和月份选择
原文出处 以下这个JS日历控件是我的闲暇之余自己编写的,所有的代码全部在IE7/IE8/Firefox下面测试通过, 而且可以解决被iframe层遮盖的问题.现在只提供两种风格(简洁版和古典版)和两种 ...
- asp.net Login控件基本属性及事件说明
原文:asp.net Login控件基本属性及事件说明 Login系列控件是微软为了简化我们的开发过程,为我们进行常规的安全开发提供块捷途径. Login系列控件包含下列控件: Login 登录控件 ...
- winform自定义控件中其他遮挡控件点击事件
自定义控件在其他窗口调用时,里面的lable阻挡了控件的点击事件 解决方法 自定义控件中lable的 点击事件 private void Lable1_Click(object sender, Eve ...
随机推荐
- 让 framset 框架中的页面全屏显示
<script type="text/javascript"> window.onload=function(){ if(window.parent!=window){ ...
- java中的输入输出方法
输入 import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 ...
- 《springcloud 四》服务保护机制
服务保护机制SpringCloud Hystrix 微服务高可用技术 大型复杂的分布式系统中,高可用相关的技术架构非常重要. 高可用架构非常重要的一个环节,就是如何将分布式系统中的各个服务打造成高可用 ...
- Java学习第二十五天
1:如何让Netbeans的东西Eclipse能访问. 在Eclipse中创建项目,把Netbeans项目的src下的东西给拿过来即可. 注意:修改项目编码为UTF-8 2:GUI(了解) (1)用户 ...
- 深入理解JavaScript系列(34):设计模式之命令模式
介绍 命令模式(Command)的定义是:用于将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或者记录请求日志,以及执行可撤销的操作.也就是说改模式旨在将函数的调用.请求和 ...
- VMWare启动虚拟机失败,提示锁定文件失败解决方法
1.问题描述:未正常关闭虚拟机,重新启动时,VMWare启动虚拟机失败 2.解决方法: ①找到该虚拟系统所在的目录,即弹出框中的目录,在目录中找到Windows XP Professional.vmx ...
- mysql通过数据文件恢复数据方法
情况描述:服务器硬盘损坏,服务器换了个新硬盘 ,然后老硬盘插在上面.挂载在这台机器.可以从老硬盘里面拿到数据.只拿到了里面的mysql数据文件夹,把数据文件夹覆盖新的服务器mysql数据文件夹 启动报 ...
- Hadoop2.x伪分模式部署
hadoop伪分布模式,只有一个节点,通常用来做测试. 一.环境准备 Linux网络配置已完成,可参见CentOS7网络配置: yum源成功挂载,可参见CentOS7本地yum源挂载: Linux已安 ...
- java集合框架(二):HashTable
HashTable作为集合框架中的一员,现在是很少使用了,一般都是在面试中会问到其与HashMap的区别.为了能在求职的时候用上场,我们有必要对其原理进行解读. HashTable的实现原理跟Hash ...
- 自定义ExtJS文件上传
日常工作中,一般文件上传都是跟随表单一起提交的,但是遇到form表单中有许多地方有文件上传时这种方式却不是很适用,以下是我工作中用的文件上传方式: { xtype: 'fileuploadfield' ...