标签归档:javascript

javascript自定义事件(event)

曾经有次在一个jQuery交流群里,有人问,能不能自定义事件,然后监听事件,比如监听一个变量的变化,当时我屁颠屁颠的给别人说,这个不大可能。现在正是为我当时的无知和逞能感到羞耻,以后再也不轻易的否定一个事情,除非我有完全的理由否定,自己不知道,不是否定的理由. 下面我就来实现那次别人说到的自定义事件,监听某个变量的变化: 标准浏览器(firefox,chrome,safari,opera等)的实现非常简单,自然,有一个document.createEvent()的函数来专门创建自定义事件,使用起来也很简单,等会儿看代码一看就明白了。 var event = document.createEvent(type); event is the created Event object. type is a string that represents the type of event to be created. Possible event types include “UIEvents”, “MouseEvents”, “MutationEvents”, and “HTMLEvents”. See Notes section for details. … 继续阅读

发表在 javascript | 标签为 , , | 留下评论

IE文本域中回车自动提交表单

当表单中只有一个文本域的时候,在文本域输入完后按回车,IE会自动帮你提交,(谢谢Andre提醒,其实这种情况在其他浏览器里也会提交的,我测试了firefox,opera, chrome。safari没测试,不过表现应该和chrome是一样的,所以主流浏览器都会自动提交,而不仅仅是IE)哪怕没定义 submit按钮,也会提交。 这个是今天在解决一个其他BUG的时候,了解到的这个问题,虽然要解决的BUG和这个没关系,这个一会儿再说。 先说这个怎么解决吧,在form里建个隐藏的input标签就可以了,可以这样  <input style:”display:none”/> 。 另外我要说说,大家要慎用IE tester这个东西啊,太不靠谱了,在这个里面执行JS和原生浏览器执行,有很大差别。今天想用这个来解决IE6的一个BUG,一直没进行到要真正解决的部分去,因为我一直以为是上面的那个问题带来的BUG,只到我用机器上的IE8运行了一段测试代码,又用IE tester新建IE8来运行,结果不一样,当时就囧了,我意识到做了一个晚上的无用功了。 只好马上用Virtual BOX安装 XP了,用原生的IE6来解决问题,果然,问题不在那里,很快解决了BUG。 所以建议大家一定要慎用IE tester,尽量用原生的浏览器来测试。 然后今天遇到的实际的BUG,是因为在js中对字符串处理的时候使用的非标准的方法。我想返回字符串中指定位置的字符,我使用了类似PHP的方法: var a=’hello world’; var b=a[0]; 这样在firefox中是有用的,b是 ‘h’ ,但是在IE下是不起作用的,翻了手册才知道,标准的方法是 charAt(). var b=a.charAt(0); 要这样才是标准的方式,换了这个后,马上就解决了要解决的BUG。

发表在 未分类 | 标签为 , , , | 2 条评论

腾讯一面名单出来了,附上查看各个分区一面人数的方法

自己写了一行js来查看人数 进入到你想查看的分区的面试名单页面,然后在浏览器地址栏输入: javascript:alert(document.getElementsByTagName(‘tr’).length); firefox有效,其他浏览器没测试

发表在 javascript | 标签为 | 4 条评论

《JavaScript: The Good Parts》讲解闭包的章节中一处代码小错误

39页,给出了一个讲解闭包的代码: var add_the_handlers=function(nodes){ var i; for(i=0;i

发表在 javascript | 标签为 | 留下评论

javascript两种创建函数的方式的不同

javascript常见的两种创建function的方法是: function testFunc(a){ alert(a); } 另外一种 var testFunc=function(a){ alert(a); } 对于第一种方式,当为创建全局执行环境而进行变量实例化时,会根据上面的函数声明创建相应的函数对象。 第二种方式,在全局执行环境的变量实例化过程中,会先为全局对象创建一个命名属性。而在计算赋值语句之前,暂时不会创建函数对象,也不会将该函数对象的引用指定给全局对象的命名属性。但是,最终还是会在全局执行环境中创建这个函数对象。 我们来看个例子来理解他们的不同 先看第一个例子: testFunc(‘test’); function testFunc(a){ alert(a); } 在这种情况下,alert会执行,虽然函数定义在使用这个函数的代码之后,但是由于在创建全局执行环境的时候就会创建这个function,所以执行的时候是有效的,我们接着看这种情况 testFunc(‘test’); function testFunc(a){ alert(a); } 这种情况下,不会alert出’test’如果你有使用firebug等调试工具的话,会报错,提示testFunc不是个function。接着看:说明在执行 testFunc(‘test’)的时候,testFunc这个函数还被有被创建。 var testFunc=function(a){ alert(a); } testFunc(‘test’); 这种情况下,也会alert出’test’ 因为最终这个function还是会被创建,只是创建的时间和第一种函数创建方法不同而已。

发表在 javascript | 标签为 | 留下评论

javascript预加载技术

今天在遇到AJAX响应过慢的时候,我当是突然有个想法,因为我的这个应用,是明确的可以知道下一个XHR传递的参数的,所以,我可以先加载下下一个的,然后,需要加载下一个的时候,实际上,要马上显示出来的已经读取过来的,我就可以马上拿来用了。 当时为这一闪念感到高兴呢,但是想想,这个应用又不负责,不应当这么慢的,还是去找瓶颈优化去了,把数据库优化了。而且这个想法应该很多前人都想到了,毕竟也不是什么负责的技术。 从川大听完腾讯的宣讲会,回来的公交车上,我想了想,好像听说过一个预加载技术的名字,我想的应该就是这个吧,回来后上网查了一下,一般这个用来预加载图片,因为加载图片是比较慢的,像我这种加载200B左右的json的,估计没人用。

发表在 WEB, javascript | 标签为 , | 留下评论