遇到的问题集合

$ git clone git://github.com/Tzxhy/Tzxhy.github.io.git myWeb
后,push 时,提示:

1
2
3
4
$ git push origin icc
fatal: remote error:
You can't push to git://github.com/Tzxhy/Tzxhy.github.io.git
Use https://github.com/Tzxhy/Tzxhy.github.io.git

解决方法:
如果在 git clone 的时候用的是 git://github.com:xx/xxx.git 的形式,那么就会出现这个问题,因为这个 protocol 是不支持 push 的
用 $git clone git@github.com:lujinjianst/myNCCL.git
就可以用 git push 了。或者使用 https 形式的.

在页面 1 用 location 属性跳转到页面 2 时,再返回上一个页面 1, 火狐中不会再从 1 跳转到 2, 而其他浏览器会继续跳转.

起因源于一道前端笔试题:

1
2
3
4
5
var fuc = [1,2,3];
for(var i in fuc){
setTimeout(function(){console.log(fuc[i])},0);
console.log(fuc[i]);
}

问:控制台会如何打印?
1 2 3 3 3 3
虽然 setTimeout 函数在每次循环的开始就调用了,但是却被放到循环结束才执行,循环结束,i=3, 接连打印了 3 次 3。
这里涉及到 javascript 单线程执行的问题:javascript 在浏览器中是单线程执行的,必须在完成当前任务后才执行队列中的下一个任务。
另外,对于 javascript 还维护着一个 setTimeout 队列,未执行的 setTimeout 任务就按出现的顺序放到 setTimeout 队列,等待普通的任务队列中的任务执行完才开始按顺序执行积累在 setTimeout 中的任务。
所以在这个问题里,会先打印 1 2 3,而将 setTimeout 任务放到 setTimeout 任务队列,等循环中的打印任务执行完了,才开始执行 setTimeout 队列中的函数,所以在最后会接着打印 3 次 3。
由此,可以知道虽然设置为 0 秒后执行任务,实际上是大于 0 秒才执行的。可是这有什么用呢?
用处就在于我们可以改变任务的执行顺序!因为浏览器会在执行完当前任务队列中的任务,再执行 setTimeout 队列中积累的的任务。
通过设置任务在延迟到 0s 后执行,就能改变任务执行的先后顺序,延迟该任务发生,使之异步执行。

例子:

这个 keypress 函数原意是监听到用户输入字符串就将其完整的显示出来,但是奇怪的是最后一个字符串总是没能显示出来

但是只要改下 onkeypress 函数就好:

1
2
3
$(‘input‘).onkeypress = function(){
setTimeout(function(){$(‘preview‘).innerHTML = $(‘input‘).value;},0);
}

PS: 或者将 keydown 改为 keyup 也行,具体原因猜测可能是 keydown 时,$(‘input‘).value 未来得及变化,(或者只有执行某个回调后变化).
原址: (http://www.cnblogs.com/suspiderweb/)

1
2
3
4
5
6
7
8
9
10
11
12
13
</head>
<body>
<p>
<input type="text" value="" name="inputtest"/>
<span id="inputtest" class="myclass"><p>span > p</p> </span>
<p id = "pp"><del>sdfef</del></p>
<button id="button1">close this window</button>
</p>
</body>
<script>
let test1 = document.getElementById("inputtest");
alert(test1.lastElementChild.appendChild(document.createTextNode("1111")));
test1.lastElementChild.appendChild(document.createTextNode("2222"))

上文中报错,提示 test1.lastElementChild 为空对象。但把下的

去掉后,正常. why?

onClick 和 onDblClick 并存的解决方法 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script type="text/javascript">
var clickTimer = null;

function _click(){
if(clickTimer) {
window.clearTimeout(clickTimer);
clickTimer = null;
}

clickTimer = window.setTimeout(function(){
// your click process code here
alert("你单击了我");
}, 300);
}

function _dblclick(){
if(clickTimer) {
window.clearTimeout(clickTimer);
clickTimer = null;
}

// your click process code here
alert("你双击了我");
}
</script>

<button onclick="_click();" ondblclick="_dblclick();">单击或双击我</button>

对 jquery 的使用(兼容 ie)

1
2
<!--[if IE]> 所有的IE可识别 <![endif]-->   只能使用在ie9及其以下版本。ie10不再识别这种语法。


对 css 的 ie hack (使用 LESS):

1
2
3
4
5
6
7
8
9
10
11
12
13
@ie8-10-fix:~"\9";
// \9 所有IE浏览器都支持
// \9\0 IE8部分支持、IE9支持
// \0 IE8、IE9支持,opera部分支持
.ie8_width(@h){
width:@h*1px@ie8-10-fix;
}

//使用
.test{
.ie8_width(20);

}

ie10 及以下版本关于 z-index 不起作用(图层 “反被” 下层元素 “遮盖”)

除去非正常使用 z-index 问题后,很可能的原因是,被遮盖的元素没有任何视觉层,比如内容层,前景层,背景层等,导致视觉穿透(可能是 DOM 渲染机制导致)