简's Blog

[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>

火狐CTRL+F5刷新页面的一个细节

火狐里CTRL+F5刷新页面后

接下去的任何操作都不加载缓存,而是去网上下载新文件

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

 

Obj.select();

 

 That All.

[JQuery]一个替换html标签为实体字符的方法

先用<div/>临时取得要转换的值

var msg = $("<div/>").text("<br />").html();

msg就是转换好的值 &lt;br /&gt;

[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事件。

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

分两种写法:

自己声明参数名

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

 

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

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

 

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

 

 

 

[PHP]使用array_merge重新排列数组下标

用了一个array_unique去除了一个数组里面的重复,但是发现下标保留了原数组的下标

但是javascript使用for循环需要下标整齐,所以寻找重新排列数组下标的方法

array_merge可以解决这个问题

 

array_merge() 函数把两个或多个数组合并为一个数组。

如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。

注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引。(参见例子 2)

语法

array_merge(array1,array2,array3...)
参数 描述
array1 必需。输入的第一个数组。
array2 必需。输入的第二个数组。
array3 可选。可指定的多个输入数组。

例子 1

<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));
?>

输出:

Array ( [a] => Horse [b] => Cat [c] => Cow )

例子 2

仅使用一个数组参数:

<?php
$a=array(3=>"Horse",4=>"Dog");
print_r(array_merge($a));
?>

输出:

Array ( [0] => Horse [1] => Dog )

[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行内就能解决,一定要深入研究!

 

 

[CSS]让ie6也支持min-height

只要在样式里面这样定义高度就行了
min-height:120px; 
height:auto !important; 
height:120px;

[windows xp]无法批量打开多个文件的解决方法

这几天突然发现一次选中多个mp3无法右键打开,查了半天,最后在国外的一个网站上找到了方法

打开注册表 HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers 先导出一份作为备份reg 然后一个一个的删除下面的项目 删一个试一次批量打开 最终找到是哪个项目的问题 然后还原全部 再删除有问题的项目




© is-Programmer.com All rights reserved. | Power by Chito 1.1.4 | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee