不可以,onfocus和onblur是输入框的事件。
可能是因为这里DOM0级更合适吧,毕竟DOM2级还要考虑兼容性,这里用DOM0级就能处理问题,也不需要考虑兼容。
function byId(id){ return typeof(id)==="string"?document.getElementById(id):id; }
hhh这个变量是在dd函数里定义的局部变量,在dd函数外是取不到的。
function fnMove(e,posX,posY){ var oDrag=document.getElementById('loginPanel'), l=e.clientX-posX, //是变化的值 t=e.clientY-posY, winW=document.documentElement.clientWidth || document.body.clientWidth, winH=document.documentElement.clientHeight || document.body.clientHeight, maxW=winW-oDrag.offsetWidth-10, maxH=winH-oDrag.offsetHeight; if(l<0){ l=0; }else if(l>maxW){ l=maxW; } if(t<0){ t=10; }else if(t>maxH){ t=maxH; } oDrag.style.left=l+'px'; oDrag.style.top=t+'px'; }
IE是万恶之首
如果不设置为null的话,这个事件其实会一直运行的,就是只要你的鼠标移动就会运行这个事件。比较浪费资源
........
this指的是当前调用函数的对象。for循环为每个lis[]添加Mouse事件。
当i=0时,代码为:lis[0].onmouseover=function{this.style.background='#567';}此时lis[0]就被添加了事件,这个时候的this代表lis[0]。
当下一次循环到;lis[1]时,this又是另一个lis[1]了。
你可以理解为第一个是this0,第二个为this1,之后this2···都是用this,但其实每个this指向的都不同。
另外,如果this换成lis[i],i是一个变量,会导致最后所有的事件都变成最后一个i(假如是5),所有事件都是lis[5].style.background了。
遇到了一个类似的问题, 现在搞清楚了
问题在于 i 的生命周期
当前在循环中, i 被定义并使用
在事件触发时 i 已经被回收, 浏览器就找不到lis[i], 所以报错
用 this 的话就不会
不知道将清楚没
老师也不会回答你的,自己多研究
ul中有class =statePanel的选择器,大哥
三三~~~
定义函数getByClass:首先,JavaScript是面向对象的语言,且永远有一个全局执行环境,而在浏览器中,全局执行环境对象为window,此处定义一个函数就是为window对象添加一个方法。在实际开发中,如果项目比较大,为了避免全局污染或同名冲突,不会直接在window下定义函数。
var oParent=parent?document.getElementById(parent):document: 等号后面是一个三元表达式。即true?1:0取1,false?1:0取0。在JavaScript中调用方法时,传参是很随意的,只要方法名正确,参数类型、参数个数是否匹配都无关紧要。因此,无法保证参数parent是否存在。此三元表达式的含义是当参数parent存在时,oParenet=parent,如果不存在,则oParent=document 。document即是html文档对象。
elements=oParent.getElementsByTagName('*'):*是通配符,在很多编程语言中都通用,代表任意字符。在此处的含义是获取标签名为任意值的dom元素对象集合。
建议:学习JavaScript,最好先买本犀牛书或JavaScript高级程序设计看看,学习一下基础语法和特性。
这是定义一个空数组,后面用push( )方法把经过判定的数组添加到这个数组中,之后可以调用这个eles的数组,我是这么理解的。
这种写法,我理解是两个不同类名,它这里需要这类名,而online这个类是控制图标的!ID等于那个类名是为了方便获取!
.login-state .online {
background: url("../images/ptlogin.png") 0 0 no-repeat;
}
<div id="loginStateShow" class="login-state-show online">状态</div>//获取图标的类添加这里
<li id="online" class="statePanel_li">//方便获取控制图标的类所以设置与类名相同的ID
<div class="stateSelect_icon online"></div>//其实是这要这个类名
<div class="stateSelect_text">我在线上</div>
</li>
loginStateShow.className='login-state-show '+id;//获取图标
statelist.style.display='block’这样就可以了
事件的传递是冒泡传递的,因此在<li>被点击的同时还会将点击事件传递到<div id='LoginState'>中,两者触发的函数刚好相互抵消了
优先级最大啊,去掉没啥影响,那要看写的人用在了什么地方
那不是有this吗?
你需要用到事件的事件对象(属性和方法)的时候,例如IE的target,type,stopPropagation这些,就要引入event参数,第一个问题的第二段代码没有涉及 那些属性和方法,所以不需要引入event参数
这个问题问得好,也见过很多人这样写。
我能知道的是声明时写length的话,只被初始化一次,如果在循环体力的话,每次都会去取length。
动态改变数组的话,这个length是会改变的,放在循环体中会不会引出新的bug呢?这个有待考虑,
不过一般我觉得放在循环体里面没有什么问题,欢迎补充
并不是所有的兼容问题都可以用||来连接。
list[i]指向的是所有经过遍历的li,并不是你鼠标经过的这一个,你要找到当前的这一个,就必须传值,而this是已经封装好的,指向当前你鼠标指向的这一个。
你说的“直接点击loginstateshow显示整个下拉菜单”意思是不是在loginstateshow的div上加上一个onclick="",这样写和给loginstate绑定点击事件效果是一样的,只是写法不一样,也会有冒泡的问题,你可以自己下载源码试试。
那个图标是通过切换css样式切换的,老师给的源码里面css文件夹下main.css第104行
解决了 把引号去掉
因为css文件里把online那些类都写好了,里面都放了图片,所以只要改类就好了