tips 前端 点击事件

新手总是时不时会纠结一下 点击事件
 我们都知道这些小东西不难 但是偶尔难道不会想想我们可能对这些即使小kiss的问题的认知其实不够清晰 一个认识不清晰的东西使用时 总会有油然而生的不安感 从而用的不放心  不舒坦 何况细节上的处理总是最能表现一个人实际经验是否丰富 技术水平是否可以称为高手的地方
 导入jquery.js文件库之后

1 <script type="javascript">
2        $(function(){
3                $(‘#xx‘).click(function(){
4                             console.log(‘xxxxxxx‘);
5                 })
6         })
7 </script>

以上为最常见的写法        用jquery与coffeescript后

1 <script type="text/coffeescript">
2           $(‘#xx‘).click ->
3                                cosole.log(‘xxxxxxx‘)
4 </script>

传统dom里的click         首先应该知道有个html有个事件属性 onclick 从而很方便的在onclick里直接调用function
而function定义在js脚本文件里 所有主流浏览器都支持此属性 如

1 <button onclick="regexp()">go regexp</button>
2 <script>
3         function regexp(){
4                console.log(‘xxxxx‘);
5         }
6 </script>

或者onclick="return regexp()" 效果一样的,不用纠结

form表单里 则常用有onsubmit属性 在点击调交后,文档尚未发送请求前 同步地激活调用的function 用来进行验证,多原始和简单的验证方式
 这样function里若return了 false 请求就不会发送

 1 <form method="post" onsubmit="return go_pass()">
 2  <button class="btn" type="submit">go pass</button>
 3 </form>
 4
 5 <script>
 6        function go_pass(){
 7           console.log(‘xxxxx‘);
 8           if(xxx){
 9                      return false;
10           }
11        }
12 </script>

function里有的人会简写成 return;
不写false,return为空为null将同样终止function执行 其效用和return false是完全一样的 因为return
false后 其后的语句同样不会被执行 return false的目的:  
就是终止函数执行

概括一下, 函数里return后的语句不会被执行 无论return的是什么
true or false or null or whatever

需要注意的是逻辑上 跳转action 与function是否执行 是独立的两部分 w3c也不会把它们混杂在一起 
onsubmit这里有必要解释一下 onsubmit="return go_pass()"
当你需要做一个对是否执行function后跳转action的判断时 请使用 onsubmit="return go_pass()"

曾经我见过很奇怪的一种写法

1 <form method="post" action="/xx/xx">
2       <button type="submit" onclick="return check()">check</button>
3 </form>

not recommand

想说这个完全是反面教材 首先不论能否达到目的
最直接的理由是逻辑混乱 语义化不明
                          
以上关于return 或者不加return 对a标签的跳转和onclick的影响也是适用的 (return 会阻止浏览器默认的行为)

只有极少数html元素没有onclick事件属性 这些元素 为<base>、<bdo>、<br>、<head>、<html>、<iframe>、<meta>、<param>、<script>、<style> 或 <title>
结果是只要是想加点击事件的元素都支持onclick事件属性就是了
此外还有一种传统dom里的onclick 事件属性写法(只是换了种方式罢了,另外也比较少见,但是是等价于onclick的)

1 document.getElementById("tea").onclick=function(){
2              console.log(‘check a‘);
3              return false;
4              console.log(‘check‘);
5 };

至于经验丰富的人用的多的是

1  $("p").bind("click", function(){
2            console.log( $(this).text() );
3 });

或者 视情况(涉及到异步加载进来的元素或者脚本时,由于页面渲染已经完成,事件已经绑定过一次,或者....通过事件委托和起泡,绑定点击事件)

1 $("body").on("click",‘.resp_click‘ function(){
2                           console.log( ‘xxxx‘ );
3  });

对于未来可能会新加进来的元素仍能起效的,  jquery除了on,以前还有一个live(不过1.9后官方已废弃了,目前用着1.8.2的jquery中文api译本的童鞋大概需要注意下)

这样做有些好处 当某个情况下我不要这个点击事件时我可以解绑,可以很方便的传递数据等(详见jquery手册bind 与unbind on 与off)

1 function handler(event) {
2             cosole.log(event.data.foo);
3  }
4        $("p").bind("click", {foo: "bar"}, handler)
5                //和
6        $("p").unbind( "click" );

另外onclick有好几种写法 现在网页上的点击事件有很多其实是这样的
    <a href="javascript:void(0)" onclick="do()">xxxxx</a> 
    并不推荐在a的href里使用javascript:协议 可能会遇到问题 比如这会导致点击时在ie下gif停止播放

其实可以这样
    <a href="#" onclick="do();return false;">xxxx</a> 
    但这样在ie6下可能会由于href先触发 页面刷新了一次而使浏览器舍弃了do()的执行
    不过好的是现在是2015年,ie6已经可以说退出历史舞台了

此外较少见的方式还有(其实也不少见,新人估计会少见趴)

1 element.addEventListener(‘click‘, function() { xxxxxx }, false);

需要注意的是在ie9及以上 才可用 但支持主流浏览器
          ie9以下 请使用:element.attachEvent(‘onclick‘, function() { xxxxx });
          此方式也work 用起来感觉很棒
          尤其是在最近开始火起来的移动端互联网开发里 有一个touch 事件 这些响应式的网页里这种事件监听的脚本写法是很常见的
          比如这样封装一下 引自 http://stackoverflow.com/questions/6348494/addeventlistener-vs-onclick

 1 function addEvent(element, evnt, funct){
 2     if (element.attachEvent)  return element.attachEvent(‘on‘+evnt, funct);
 3
 4     else   return element.addEventListener(evnt, funct, false);
 5  }
 6
 7        // example
 8        addEvent(
 9                document.getElementById(‘myElement‘),
10                ‘click‘,
11                 function () { alert(‘hi!‘); }
12        );

或者类似这样 引自:http://jackleechina.iteye.com/blog/1595397

 1  if(window.addEventListener){          // Mozilla, Netscape, Firefox
 2
 3      //element.addEventListener(type,listener,useCapture);
 4      button.addEventListener(‘click‘, alert(‘11‘), false);
 5      button.addEventListener(‘click‘, alert(‘12‘), false);
 6      //执行顺序11 -> 12
 7  }
 8  else {                                // IE
 9
10      button.attachEvent(‘onclick‘, function(){alert(‘21‘);});
11      button.attachEvent(‘onclick‘, function(){alert(‘22‘);});
12      //执行顺序22 -> 21
13  }  

通用的是click点击事件 但是因为click事件在移动端会出现延迟响应的情况 约200ms,触发移动端的点击常用tap事件来代替
关于事件监听器 分离在后面的tips详细点总结下

http://i.cnblogs.com/EditPosts.aspx?opt=1

时间: 2024-10-08 05:06:38

tips 前端 点击事件的相关文章

前端进阶之路:点击事件绑定

网址:http://web.jobbole.com/83591/ 背景 我是一个前端小兵,我在一家互联网公司做做一些简单的业务开发. 某一天,我接到了一个需求,做一个抽奖功能.公司里的前辈们已经完成了业务逻辑,而且已经提供了业务功能的接口,只需要我制作页面并完成事件绑定即可. 我写好了页面,页面中有一个 ID 为 lucky-draw 的按钮元素.接下来,我需要为它绑定点击事件.我是这样写的: var btn = document.getElementById('lucky-draw') btn

[前端][自定义DOM事件]不使用setTimeout实现双击事件或n击事件

使用setTimeout实现双击事件 例如,这样: let div = document.getElementById("div"); doubleClick(div, function (event) { console.log('双击') }) function doubleClick(ele, fn) { // 省略参数合法性的判断 let event = new Event("doubleClick"); // 自定义双击事件(可以使用CustomEvent

微信小程序学习总结(2)------- 之for循环,绑定点击事件

最近公司有小程序的项目,本人有幸参与其中,一个项目做下来感觉受益匪浅,与大家做下分享,欢迎沟通交流互相学习. 先说一下此次项目本人体会较深的几个关键点:微信地图.用户静默授权.用户弹窗授权.微信充值等等. 言归正传,今天分享我遇到的关于wx:for循环绑定数据的一个tips:  1. 想必大家的都知道wx:for,如下就不用我啰嗦了: <view class="myNew" wx:for="{{list}}">{{item.title}}<view

【转】Android - Button(按钮)的响应点击事件的4种写法

原文网址:http://www.yrom.net/blog/2011/12/12/android-4-onclicklistener-of-button/ Button控件setOnclickListener(View.OnClickListener listener)来接收一个点击事件的监听器 自定义一个点击事件监听器类让其实现View.OnClickListener的onClick(View v)方法 1 2 3 4 5 class MyOnClickListener implements

触发点击事件,接受后台参数,并把隐藏的div显示出来

1点击事件 1.1重点112和114行,112用的是正则表达式,114是加一些查找的限制,如是中文并且得3个中文字符才会自动查询.没有这些限制的话,键盘敲一次,就会查询一次,特别麻烦!!! 1.2 注意json传参数的方式 2.1接受后台参数 先把要查询的公司名字发送给后台,通过模糊查询返回一个lis给前端 把查询到的值通过不同的id.来接受. 3.1并把隐藏的div显示出来 这里用 $("#id").show();是显示不了的.因为在要显示的字段前已经被 220行这句话给全部隐藏了

Unity3D开发之NGUI点击事件穿透响应处理

http://www.xuebuyuan.com/1936292.html 在使用NGUI 开发2D项目的时候,发现了一个问题,就是如果点出一个菜单,然后点击菜单上面的按钮的时候就会使得按钮下面的物品也会触发点击事件(如果有的话), 经过查阅相关资料,发现了一个很方便的处理方法:分层处理.就是把菜单层和游戏显示层分为不同的Layer:比如: 和 然后,在NGUI的UICamera的脚本那里,设定它的事件响应: 这样的话,他就会响应到相应的层了,当然还可以更灵活地去用代码控制设定使用,这里只是一个

AndroidのListView之滑动列表项(点击事件和滑动事件共存) - bvin

返回脚本百事通 这里正好在项目有这么一个bt的需求,如下图ListView的item可以响应点击事件也可以响应item的左右滑动事件,两个事件可以相互独立互不影响. 听说iphone的list选项就有这样bt的功能,安卓版的手机QQ和微信和QQ通讯录也有类似的效果,在网上各种寻早方案都试过,要不只能滑动不能点击要么就只能点击不能滑动,而且操作很不灵敏,网上的代码都是在itemView的onTouch方法里处理,判断down和up的像素差.其实这样操作相当不便,down-up这样的其实只能算拖动事

如何绑定android点击事件--跳转到另一个页面并实现关闭功能?

一.点击按钮跳转到另一个页面. eg:实现从一个页面点击跳转到另一个页面 1.首先在一个布局文件(.XML)中绘画了一个跳转按钮(id为btn1): <Button         android:id="@+id/btn1"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:tex

今天依然是 JQ点击事件之“点击淡入淡出事件”

废话不多说,先贴代码,再解释 <script> $(document).ready(function(){ $("button").click(function(){ $("#div1").fadeToggle(); $("#div2").fadeToggle("slow"); $("#div3").fadeToggle(3000); }); }); </script> <p&