经验

1、在js中用console调试是个不错的方式,但是在IE8中却有不支持的现象,会导致你的js出错,所以在开发的时候使用console在firefox中调试可以,
但是,调试完成之后一定记得删除,要不会在IE8中有影响。注意。

 

2、fiddle:

REGEX:http://www\.jykc\.net/exam/js/oneui/knowledge_map\.js\?_=\d{13}

 

3、获取元素上绑定的事件:

$._data($('#btn')[0],'events'):1.8.2,因为在这个版本中.data()被移除了。[0]不能少

$.data():用于其他版本

 

4、给document加事件,回调里的元素可以先没有:

$(document).keydown(function(event){
  console.log('keydown 1');
  $('#test').css('color','red');
});

$('#save').click(function(){
  $('#abc').html('<div id="test">123</div>')
})

 

5、

闭包学习时,会找<li>的内容,使用事件代理。受这个影响,删除li时,也会用事件代理(父元素)。其实可以给元素加class,给class加事件。

给元素加click事件,如果元素是之后通过.html()方法加载的,则click事件无效

给元素加click事件,删掉该元素,增加该元素,click之后没有反应了。

 

6、碰到的一个问题:

  argsdata.name = 'klm';

  var node = {};

  node.age = 25;

  argsdata.child = [];

  argsdata.child.push(node);



  argsdata = JSON.stringify(argsdata);

  console.log('argsdata:'+argsdata);



  $.ajax({

    type:"POST",

    async:true,

    cache: false,

    dataType:"json",   

    url:"/klm/saveKLM",

    data:argsdata,    

    success:function(rdata, textStatus, XMLHttpRequest)

    {

      console.log('saveKLM');

      console.log('saveKLM:'+rdata);            

    }    

  })

通过json2.js,把js对象转为json对象,通过如上$.ajax传给后台,通过req.body.获得参数。但是后台的JSON.stringify(req.body)中,"都变成了\",获取的参数都是undefined。

首先,我用的express自动生成时已经加了bodyParser.json()。其次,我刚开始传的是js对象,如果没有js对象中没有数组的话,都是正常的;接着手动拼接json字符串,还是\"。而且dataType都是json。在我绝望的时候,看到headers中是form-data,view source中会把我传的数据作为key,加一个""的value。想起了express中只支持json和x-www-form-urlencoded,难道我的content-type是x-www-form-urlencoded。看了一下,果真如此。所以在$.ajax中加contentType: "application/json; charset=utf-8",就可以了。

对于数据,view parsed就是源码中用UrlEncode编码之后的数据,比如将斜杠/变成%2F。

对于header,view parsed就是对于原始的header数据按照协议规范去解析。

另外发现了一个好的调试思路:在nodejs中,没法看到req.body的值(JSON.stringify(req.body)不算),可以用res.send(req.body)传到前台,加个断点,就可以看到传到后台的值是什么样子。

发现自己还是很聪明的,而且还很执着,困难和我,天地间只能有一个。

6_1:碰到一个问题:我删掉表之后,没有调用ajax的success的函数,nodejs提示后台都正常。

解决办法:使用complete,输出textStatus,原来是预定返回json,但是删除之后不需要传json,只需要传字符串说明就好,所以dataType改为text。 

7、双击的时候也会触发单击事件

8、keydown事件添加时:最好加载document,如果加在元素上就会有问题。如果元素是通过js添加的,那就没有keydown的事件了。

9、KsmM.findByIdAndUpdate:使用Model

var update_klm = {

		score : score,

		comment : req.body.comment,

		ksmname : req.body.ksmname

	};

	var options_klm = {};



	KsmM.findByIdAndUpdate(req.body.ksmid, update_klm, options_klm, function(err){

		if(err){

	        console.log('updateKLM save:'+err);

	    }else{

	    	console.log('find _id');

			console.log('score:'+result.score);

	    } 

		

	})//

  

 

你可能感兴趣的:(经验)