2
24
2010
0

[JavaScript]window.open控制设置了名字的子页面不刷新的方法

 当window.open()指定了第二个参数name的时候,会固定显示出一个子页面,但是每次点击的时候都会自动刷新子页面

我最近做了一个聊天页面,如果再次点击打开聊天页的按钮会刷新了子页面,页面的聊天记录等数据就会全部消失

下面的代码解决了这个问题

a.html

<input type=button  onclick='window.open("b.html","b","width=600,height=300");' value='openB' />

b.html

<iframe name="b" src="refresh_me.html" style='display:none'></iframe>
page B

refresh_me.html

<script>
    window.name="b";
    window.top.name="";
</script>

9
7
2009
2

[JavaScript]选中文本框内的文字

 

Obj.select();

 

 That All.

Category: JavaScript | Tags: javascript 选中文字
8
11
2009
1

[JavaScript]解决页面onresize缩放时多次调用的问题

IE8简直太脆弱了,加了一段监听窗口缩放的代码就不时的挂掉

发现Gmail的邮件列表用到了监听浏览器窗口的事件,不一样的是设置了一个延迟执行,这样就解决了多次调用的问题

这样ie8挂掉的几率应该就小多了吧!

var timer = null;
window.onresize(function(){
    if(timer == null){
        timer = setTimeout(function(){
            //缩放后你要执行的代码
            doWhatUWant();
            timer = null;
        },200);
    }
});

 

update:

今天继续测试页面时,ie8再次假死,怨念

也就是说设置这样一个延迟操作只能让挂掉的几率变小,但是我正在做这个是一个聊天的页面,一旦是挂掉了,聊天信息就全没了,用户会发疯的

于是继续搜索找到了下面的这个解决方法

传送:feiyu.asgard.cn/article_225.html

解决IE6,IE7下resize事件不断触发造成浏览器假死的问题

注:本示例采用jquery,原理都通用,用其他库或是不用库,只要改下代码即可。

有时,我们要在网页的resize事件中执行相关js代码。但是在ie6,ie7下,如果你缩放浏览器,resize事件会不断触发,造成假死现 象。把以下代码存为html文件,加上jquery.js,然后在ie6,ie7下打开,然后缩放下试试(假死后请用任务管理器结束任务):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>1</title>
<script src="jquery.js"></script>
<script>
var i=0;
$(function() {
 $(window).resize(function() {
  $("body").append("<p>" + (++i) + "</p>");
 });
});
</script>
</head>
<body></body>
</html>

为了解决该问题,以前采用setTimeout和clearTimeout来做,但是效果并不理想。虽然不会假死了,但测试结果是resize事件 还是会不断被执行,在资源管理器中监视时发现resize几次后CPU占用就上去了(根据setTimeout所定的延迟决定占用量)。

经过GOOGLE及反复试验,终于有较好解决该问题的方法。先看代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>3</title>
<script type="text/javascript" src="jquery.js"></script>
<script>
var i=0;
$(function() {
 if($.browser.msie && ("6.0,7.0".indexOf($.browser.version) != -1)) {
  $("body").append(
  '<div id="fix-ie-resize" style="width:100%;height:100%;position:absolute;z-index:-999;"></div>'
  );
  $("#fix-ie-resize").resize(function() {
   $("body").append("<p>" + (++i) + "</p>");
  });
 }
 else{
  $(window).resize(function() {
   $("body").append("<p>" + (++i) + "</p>");
  })
 }
});
</script>
<style>
body{margin:0;}
</style>
</head>
<body>
</body>
</html>

代码意思为:

判断浏览器是否是IE6或IE7,如果是的话,向body中加入一个长宽都是100%的无内容层,并且把resize事件绑定在该层上。

如果是其他浏览器,则直接绑定到window的resize事件。

Category: JavaScript | Tags: javascript 页面缩放
7
28
2009
0

[JavaScript]匿名函数参数的问题

分两种写法:

自己声明参数名

(function(x,y){
    alert(x+','+y);
})(1,2)
//显示 1,2

 

不声明参数(通过arguments数组取得)

(function(){
    alert(arguments[0]+','+arguments[1]);
})(1,2)
//显示 1,2

 

事实上只用知道参数的顺序和个数就可以自己定义参数名取得参数值

 

 

 

6
5
2009
0

[JQuery]捕捉按键keyCode的问题

今天遇到一个小问题代码如下

$("#input_textarea").keydown(function(){
    alert(event.keyCode);
})

提示event未定义

input_textarea是一个文本输入框

我想能在输入时捕获按下的是哪个键,以前不用JQuery时是通过这样的写法:(w3c的写法)

<textarea id="input_textarea" onkeydown="alert(event.keyCode)"></textarea>

找了半天,终于知道原来jquery已经帮我封装好了,连浏览器类型都不用判断,方法如下

$("#input_textarea").keydown(function(event){
    alert(event.keyCode);
})

看来以后还是要学习一下jquery的源码,才能了解更多底层的东西啊!

另外赞一下jquery,确实太喜欢了,以前要用上百行解决的问题50行内就能解决,一定要深入研究!

 

 

Category: JavaScript | Tags: 事件 jquery javascript
2
11
2009
0

[XML][JavaScript]XML DOM 浏览器差异

不同的浏览器在 XML DOM 中处理空文本节点的方式是不同的。
 

实例

下面的例子使用 XML 文件 books.xml

函数 loadXMLDoc(),位于外部 JavaScript 中,用于加载 XML 文件。

显示节点列表的长度
本例显示了一个节点列表的长度。在 IE 和其他浏览器中,结果是不同的。
忽略节点间的空文本
本例检查节点的 nodeType,且仅处理元素节点。

DOM 解析中的浏览器差异

所有现代浏览器都支持 W3C DOM 规范。

不过,浏览器之间是有差异的。重要的区别有两点:

  • 加载 XML 的方式
  • 处理空白和换行的方式

在 “解析 XML DOM” 这一节,已经解释了加载 XML 的不同方式。

在本节中,我们将讲解处理空白和换行的不同方式。

DOM - 空白和换行

XML 经常在节点之间含有换行或空白字符。这是在使用简单的编辑器(比如记事本)时经常出现的情况。

下面的例子(由记事本编辑)在每行之间含有 CR/LF,在每个子节点之前含有两个空格:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

Firefox,以及其他一些浏览器,会把空的空白或换行作为文本节点来处理,而 Internet Explorer 不会这样。

下面的代码片段显示 (books.xml 的) 根元素拥有多少个子节点:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.documentElement.childNodes;
document.write("Number of child nodes: " + x.length);

例子解释:

  • 通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
  • 获取根元素的子节点
  • 输出子节点数目

结果取决于所使用的浏览器。Firefox 输出 9,而 IE 输出 4。

TIY

忽略节点间的空文本

如需忽略元素节点之间的空文本节点,需要检查节点类型。元素节点的类型是 1:

xmlDoc=loadXMLDoc("books.xml");

x=xmlDoc.documentElement.childNodes;

for (i=0;i<x.length;i++)
{ 
if (x[i].nodeType==1)
  {// only process element nodes 
  document.write(x[i].nodeName);
  document.write("<br />");
  } 
}

例子解释:

  • 通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
  • 获取根元素的子节点
  • 检查每个子节点的节点类型。如果节点类型是 "1",则是元素节点

TIY(简单) 或者 TIY(完整)

2
11
2009
0

[JavaScript]动态得到select控件选中的值

 

<html>
<head>
<script type="text/javascript">
function getElements(){
    var x=document.getElementsByTagName("select");
    for(var i=0; i<x.length; i++){
        alert(x[i][x[i].selectedIndex].value);
    }
}
</script>
</head>
<body>
<select>
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
</select>
<br />
<select>
<option value=a>a</option>
<option value=b>b</option>
<option value=c>c</option>
</select>
<br />
<input type="button" onclick="getElements()" value="选中了什么?" />
</body>
</html>
 
Category: JavaScript | Tags: javascript 动态表单
2
2
2009
11

[javascript]javascript的URL编码和解码

在 使用url进行参数传递时,经常会传递一些中文名的参数或URL地址,在后台处理时会发生转换错误。在有些传递页面使用GB2312,而在接收页面使用 UTF8,这样接收到的参数就可能会与原来发生不一致。使用服务器端的urlEncode函数编码的URL,与使用客户端javascript的 encodeURI函数编码的URL,结果就不一样。

javaScript中的编码方法:
escape() 方法:
采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码 (xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字 符: @ * / +

英文解 释:MSDN JScript Reference: The escape method returns a string value (in Unicode format) that contains the contents of [the argument].

All spaces, punctuation, accented characters, and any other non- ASCII characters are replaced with %xx encoding, where xx is equivalent to the hexadecimal number representing the character.

For example, a space is returned as "%20."

Edge Core Javascript Guide: The escape and unescape functions let you encode and decode strings.

The escape function returns the hexadecimal encoding of an argument in the ISO Latin character set.

The unescape function returns the ASCII string for the specified hexadecimal encoding value.



encodeURI() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '

英文解 释:MSDN JScript Reference: The encodeURI method returns an encoded URI.

If you pass the result to decodeURI, the original string is returned.

The encodeURI method does not encode the following characters: ":", "/", ";", and "?".

Use encodeURIComponent to encode these characters. Edge Core Javascript Guide: Encodes a Uniform Resource

Identifier (URI) by replacing each instance of certain characters by one, two, or three escape sequences representing the UTF- 8 encoding of the character



encodeURIComponent() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相 比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编 码之后URL将显示错误。不会被此方法编码的字符:! * ( )

英文解 释:MSDN JScript Reference: The encodeURIComponent method returns an encoded URI. If you pass the result to decodeURIComponent, the original string is returned.

Because the encodeURIComponent method encodes all characters, be careful if the string represents a path such as /folder1 /folder2 /default.html. The slash characters will be encoded and will not be valid if sent as a request to a web server. Use the encodeURI method if the string contains more than a

single URI component. Mozilla Developer Core Javascript Guide: Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one,

two, or three escape sequences representing the UTF- 8 encoding of the character.



 
因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面 的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用 encodeURI或者encodeURIComponent。

       另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有。

英文注 释:The escape() method does not encode the + character which is interpreted as a space on the server side as well as generated by forms with spaces in their fields.

Due to this shortcoming, you should avoid use of escape() whenever possible. The best alternative is usually encodeURIComponent().

Use of the encodeURI() method is a bit more specialized than escape() in that it encodes for URIs [REF] as opposed to the querystring,

which is part of a URL. Use this method when you need to encode a string to be used for any resource that uses URIs and needs certain characters to remain un- encoded. Note that this method does not encode the ' character, as it is a valid character within URIs.Lastly, the encodeURIComponent() method should be used in most

cases when encoding

a single component of a URI. This method will encode certain chars that would normally be recognized as special chars for URIs so that many components may be included.

Note that this method

does not encode the ' character, as it is a valid character within URIs.

 
1.编码处理函数
1) encodeURI 返回一个对URI字符串编码后的结果。URL是最常见的一种URI;
2) decodeURI 将一个已编码的URI字符串解码成最原始的字符串返回;
3) 举例: < Script language = " javascript " > 输出结果如下: encodeStr: http://www.amigoxie.com/index.jsp?name=%E9%98%BF%E8%9C%9C%E6%9E%9C decodeStr: http://www.amigoxie.com/index.jsp?name=xind
 
2. 数值处理函数
1) parseInt 将一个字符串指定的进制转换为一个整数,语法格式为: parseInt(numString, [radix]) 第一个参数是要进行转换的字符串,是介于2到36之间的数值,用于指定进行字符串转换时所用的进制。 举例如下: 输出结果如下: 默认情况下的结果:32:32;032:26;0x32:50 转为2进制的结果:32:NaN;032:0;0x32:0 转为8进制的结果:32:26;032:26;0x32:0 转为16进制的结果:32:50;032:50;0x32:50 11001010转换后的结果: 2进制:202;16进制:285216784 8进制:2359816;10进制:11001010 43abc转换后:43;abc43转换后:NaN;abc转换后:NaN
2) parseFloat方法 该方法将一个字符串转换成对应的小数。 eg. 输出结果如下: 4.11 5.1 3) isNaN方法 该方法用于检测前两个方法返回值是否为非数值型,如果是,返回true,否则,反回false
 
转至:http://hi.baidu.com/blueyund/blog/item/dc060bd1bb8e5cd4562c8436.html
Category: JavaScript | Tags: javascript url编码
1
20
2009
2

[JavaScript]颜色渐变代码

 

//颜色渐变方法
function fadeColor( from, to, callback, duration, totalFrames) {
        //用一个函数来包裹setTimeout,根据帧数来确定延时
        function doTimeout(color,frame) {
                setTimeout(function() {
                        try {
                                callback(color);
                        } catch(e) {
                                JSLog.write(e);
                        }
                }, (duration*1000/totalFrames)*frame);
                //总持续秒数/每秒帧数*当前帧数=延时(秒),再乘以1000作为延时(毫秒)
        }
        // 整个渐变过程的持续时间,默认为1秒
        var duration = duration || 1;
        // 总帧数,默认为持续秒数*15帧,也即每秒15帧
        var totalFrames = totalFrames || duration*15;
        var r,g,b;
        var frame = 1;
        //在第0帧设置起始颜色
        doTimeout('rgb(' + from.r + ',' + from.g + ',' + from.b + ')',0);
        //计算每次变化所需要改变的rgb值
        while (frame < totalFrames+1) {
                r = Math.ceil(from.r * ((totalFrames-frame)/totalFrames)
                + to.r * (frame/totalFrames));
                g = Math.ceil(from.g * ((totalFrames-frame)/totalFrames)
                + to.g * (frame/totalFrames));
                b = Math.ceil(from.b * ((totalFrames-frame)/totalFrames)
                + to.b * (frame/totalFrames));
                // 调用本frame的doTimeout
                doTimeout('rgb(' + r + ',' + g + ',' + b + ')',frame);
                frame++;
        }
}

//使用方法
fadeColor(
        {r:255,g:255,b:134}, //star color
        {r:255,g:255,b:255}, //end color
                function(color) {
                        document.getElementById("left").style.backgroundColor = color;
                },
        1
);
Category: 未分类 | Tags: javascript 颜色渐变
11
28
2008
1

[JavaScript]程序触发点击事件

function doClick(obj){
    if (document.createEvent){//火狐写法
        var evObj = document.createEvent('MouseEvents');
        evObj.initEvent( 'click', true, false );
        obj.dispatchEvent(evObj);
    }else{//ie写法
        obj.click();
    }
}

ie比较简单,但不规范,火狐代码多一点,但是规规矩矩

但是似乎`

Category: JavaScript | Tags: javascript 鼠标点击

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com