解惑

解己之惑,解人之惑

分类:JavaScript (第2页共2页)

JavaScript

推荐一个AJAX相关的JS库:setInnerHTML

>跨浏览器的设置innerHTML方法

这个JS库是无意中发现的,而且刚好我们的产品要引入AJAX,但是我们又不能使用纯粹的AJAX方案,因为我们的产品已经开发了很长时间了,服务器端返回的是HTML,要专门为引入的AJAX返回特殊的内容工作量比较大,但是由于返回的HTML比较复杂,还可能包含了JS文件的引用以及JS代码,所以在IE下或者FF下总是有这样那样的问题,这个JS库的引入很好的解决了我们面临的问题,推荐在已有B/S产品或者项目中引入AJAX特性的项目使用这个解决方案。

IE的并发连接请求限制导致的问题

公司的产品导入了AJAX,但是后来发现一个严重的问题,就是在IE下,首页切换到其它页面比较困难,特别是首页还有一个下拉列表,选择不同的值会将首页的那些AJAX区域重新加载,如果其中几个比较慢(服务器端返回比较慢,因为有些存在性能问题,数据量大了以后查询特别慢),那么切换的时候要等很长时间,所以表面上看上去就是IE死掉了,但是在FireFox下没有这个问题。后来查证是IE下有两个并发连接请求的限制,每个AJAX请求也都算一个请求。后来的解决办法就是将AJAX请求排队,一个执行完了才能执行另外一个,这样无论怎么切换都是马上响应的,这个修改只对IE有效,FF下就不进行限制。
阅读全文

JavaScript中的HashMap

JavaScript是没有HashMap的标准实现的,但是我们可以使用Object的特性完成HashMap的功能,例如:

  var divRequestMap = new Object();
  function ajax_loaddiv_get(url,divId)                                                            
  {
    if(divRequestMap[divId] != null)
    {
          abortRequest(divRequestMap[divId]);
    }
    var req = createrequest();
    divRequestMap[divId]=req;
    …
  }

从上面的代码我们看到可以直接将字符串做为数组下标使用,这个和HashMap中使用字符串做为关键字存取内容是类似的,但是不足的是没有HashMap的对于主键和值集合进行遍历的方法。
如果要一个功能全面的HashMap也很简单,网上有很多标准实现
推荐一个简单的实现,也可以直接下载封装好的JS文件

在其它的地方覆盖元素已经有的事件处理

在某些情况下我们可能需要修改某个表单元素的事件处理机制,但是原有的代码可能不能修改,那么我们可以在原有的代码的后面增加新的代码并覆盖以前的事件处理代码:
<script language="JavaScript" for="elementID" event="eventName">
 …
</script>
 
 这段代码应该位于整个文件的末尾,这样才能比较好的保证可以覆盖已有的事件处理,当然使用这个也可以添加事件处理。
这样的坏处是事件处理和对象分离,如果是别人维护你的代码,他可能会不知道你的事件处理代码到底是怎么加的。不过这个技巧对于开发的灵活性是有很大帮助的,而且可以以一种plugin的方式动态的增加事件处理,而不用在原有的生成elements的地方加判断,可以加在其它的不影响代码阅读的地方。

给body添加事件处理

今天发现可以给body或者其它的element添加事件处理器而原来的可以保留,但是ie和netscape的不兼容,就自己写了一个兼容两种方式的:
 function attachWindowEventHandler(event,func)
  {
    if(navigator.appName == ‘Netscape’)
    {
          window.addEventListener(event,func,false);
   }
   else
   {
         window.attachEvent(‘on’+event,func);
   }
 }
 不知道有没有可以兼容IE和Netscape的javascript?不过现在Netscape的使用范围太小了,可能性不大。

更新的文章

© 2024 解惑

本主题由Anders Noren提供向上 ↑