JQ绑定事件的叠加和解决,index()方法的坑
JQ绑定事件的叠加和解决,index()方法的坑
前言
在做过几个不大不小的项目后,发现技术这种东西,必须要多多实践,才能发现各种问题,理论的知识掌握的再好终究是纸上谈兵。
因此目前感觉有两点是必须要坚持的:①需要不断的学习,加大知识面的广度,才不至于碰到问题连是什么都不知道。
② 需要有知识的沉淀,加强知识面的深度,提高解决问题的能力。俗话说:好记性不如烂笔头,那么记录下遇到的问题是必不可少的。
绑定事件的叠加
在jQuery学习的过程中,更多是学习如何绑定,光记着有几种绑定事件的方式了。而且在做项目过程中,主要也是绑定事件,很少有取消绑定事件。这就导致了我在一个项目中,出现了问题。我印象非常深刻,因为我足足花了一个晚上加第二天早上才发现问题。然后解决(毕竟新手,经验不足)
需求是这样的: 当浏览器窗口宽度小于1000时,点击一个按钮,导航栏高度渐渐变大,显示出来,再次点击,导航栏高度渐渐减小,隐藏起来。(默认是隐藏的)
然后我是给window绑定resize事件,在resize()方法里面给按钮绑定点击事件,绑定事件的部分代码如下:
if ($(window).width < 1000) {
$('.dropdown-toggle').click(function() {
if (flag == false) {
$('.dropdown-menu').slideDown();
$('.space').animate({height: '59px'});
flag = true;
console.log(flag);
} else {
$('.dropdown-menu').slideUp();
$('.space').animate({height: '0px'});
flag = false;
console.log(flag);
}
});
}
这样就导致当每次调整浏览器窗口且宽度小于1000,就绑定事件。这样导致的问题是点击一次按钮,你绑定了几次事件,就把处理程序执行几遍。我出现了诸如调整窗口奇数次,没有问题,但是调整窗口偶数次就导致导航栏快速上下,或者干脆不下来,还有重复多次上下上下。再多说一句,第一次调整窗口在第6行下输出flag值为true(默认flag值为false).再调整一次窗口清空控制台在控制台就变false,true.以此类推。。。
来个题外话: 《JavaScript高级程序设计(第3版)》中13.4.1这么说resize事件:
关于何时会触发resize事件,不同浏览器有不同的机制。IE, Safari, Chrome和 Opera会在浏览器窗口变化了1像素时就触发resize事件,然后随着变化不断重复触发。Firefox则只会在用户停止调整窗口大小时才会触发resize事件。由于存在这个差别,应该注意不要在这个事件的处理程序中加入大计算量的代码,因为这些代码有可能被频繁执行,从而导致浏览器反应明显变慢。
我的处理方法是①在resize处理程序的入口解除绑定的事件,将以上代码封住到toggleNav函数中
$('.dropdown-toggle').unbind('click', toggleNav);
每次开始就解除绑定事件,保证只有下面的一个绑定事件。
②修改代码如下:
if ($(window).width() < 1000) {
$('.dropdown-toggle').bind('click', toggleNav);
}
这样就解决了绑定事件的叠加问题。但是这样也就有了 《JavaScript高级程序设计(第3版)》书中说的问题, 效率好像并不高,这个不是本篇文章的重点,在以后我会改进。在查阅资料的过程中有参考这篇博文。
index()方法
在制作“鼠标悬停遮罩层头像征名投票特效”项目时,发现了这个问题。
整体的静态效果如图:

每一个征名区的HTML代码如下:
<!-- 征名1 -->
<div class="area">
<!-- 遮罩层 -->
<div class="mask">
<span>征名释义:征名1</span>
</div>
<div class="Name">
<span>征名1</span>
</div>
<!-- 投票区 -->
<div class="voteArea">
<span class="num">1003票</span>
<div class="btn">
投票
</div>
</div>
</div>
需求是: 点击投票按钮,相应去的票数加1.
获取相应的票数值,我是这么写的:
var num = parseInt($('.num').eq($(this).index()).html());
结果管点哪个按钮,都只对“征名2”的票数进行加1($(this).index()一直输出1。一查手册发现:
如果不给index()方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的位置。
一看DOM结构,果然类名为"voteArea"DIV下面只有一个span元素和一个div元素(HTML结构如上)。".btn"相对于其同辈元素位置确实是1。
问题找到了,就好办了。获取".btn"的上一个紧邻的同辈元素我们可以使用prev()方法。
总结
以上就是我在做项目过程中发现的问题,与大家一起分享。如果哪里写的不好可以指出,会加以改进。本人是一名菜鸟,与君共勉。
JQ绑定事件的叠加和解决,index()方法的坑的更多相关文章
- JS与JQ绑定事件的几种方式.
JS与JQ绑定事件的几种方式 JS绑定事件的三种方式 直接在DOM中进行绑定 <button onclick="alert('success')" type="bu ...
- jq绑定事件的4种方式
jQuery提供了多种绑定事件的方式,每种方式各有其特点,明白了它们之间的异同点,有助于我们在写代码的时候进行正确的选择,从而写出优雅而容易维护的代码.下面我们来看下jQuery中绑定事件的方式都有哪 ...
- JQ绑定事件(1.9已经废除了live()等绑定事件方法,on()方法是官方推荐的绑定事件的一个方法)
本文来源:http://www.cnblogs.com/leejersey/p/3545372.html jQuery on()方法是官方推荐的绑定事件的一个方法. $(selector).on(ev ...
- jq 绑定事件和解绑事件
<!DOCTYPE html><html><head> <script src="http://cdn.static.runoob.com/libs ...
- 高德地图marker事件监听-高德地图marker绑定事件就执行了[解决立即执行]
官方的demo是这样的:地址:[http://lbs.amap.com/api/javascript-api/example/infowindow/add-infowindows-to-multipl ...
- JavaScript中绑定事件监听函数的通用方法addEvent() 和 事件绑定之bindEvent()与 unBindEvent()函数
下面绑定事件的代码,进行了兼容性处理,能够被所有浏览器支持: function addEvent(obj,type,handle){ try{ // Chrome.FireFox.Opera.Safa ...
- jquery添加未来元素时,其绑定事件不起作用解决办法
delegate说起对未来元素是其作用的,于是写下代码: <!DOCTYPE HTML> <html> <head> <meta charset=" ...
- [JS] jq绑定事件的参数传递
$(function(){ var obj = {name:"select",param:"2"}; $("#select").click( ...
- JQuery 绑定事件时传递参数的实现方法
如题,比如我想在$(":text").bind("keyup",funcionName);将当前的文本框作为参数传递给 functionName所代表的函数,应 ...
随机推荐
- 用var 变量=函数名 方式调用函数时如何传值的问题
通过:xmlhttp.onreadystatechange= function(){FuncName(param)};orxmlhttp.onreadystatechange= new Functio ...
- bzoj1688 疾病管理
Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the fa ...
- PHP验证码文件类
转自:http://www.blhere.com/1165.html 12345678910111213141516171819202122232425262728293031323334353637 ...
- pycharm 的简单操作
pycharm常用 快捷键 ctrl + q 快速查看文档 ctrl + 鼠标左键 进入代码定义 CTRL + F1 显示错误描述或警告信息 F3 下一个 Shift + F3 前一个 Ctrl + ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第一章:向量代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第一章:向量代数 学习目标: 学习如何使用几何学和数字描述 Vecto ...
- python 错误类型
- @codeforces - 1149D@ Abandoning Roads
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 点 m 条边的无向连通图,每条边的边权为 a 或 ...
- Alpha版本第一周作业
姓名 学号 周前计划安排 每周实际工作记录 自我打分 LTR 61213 1.撰写博客2.分配具体任务并完成个人任务 1.已完成博客撰写2.任务分配完成并继续构思实现方法 95 LHL 61212 完 ...
- 为什么不喜欢在 QQ 群里回答问题?
为什么不喜欢在 QQ 群里回答问题? 没有主题,主题随时都在变. 回答后无法备份,当然自己有心可以总结一下. 实时性要求太强,可能回答但是突然有事离开,再回头看已经是 几十条的留言. QQ 群用来闲聊 ...
- 关于Lattice Planner规划算法的若干问答
Apollo问答 | 关于Lattice Planner规划算法的若干问答 上周,我们在Apollo开发者交流群内做了关于Lattice Planner的分享.这里,我们将社群分享里开发者提出的问 ...