今天在做一个网站开发的过程中遇到了一个小问题,解决之后,发现这应该是很多学习jquery的新手朋友们会遇到的问题,故在这里记录一下。
基本需求和实现要点:这是一个购物网站,在用户点击“收藏店铺”或者“收藏商品”之后,用ajax把数据传递给后台进行处理,后台返回一个值给html,再由html根据返回的值,在页面上用一个模态框显示信息,随后模态框淡出。
在这里,为了简化问题,我们暂时不谈后台的处理。
似乎看上去,对模态框,用一个fadeout方法来处理就可以了,但是事实上,用户可能会进行连续多次的点击收藏,此时模态框就不一定能正确显示和淡出了。为此,我们自然而然的得到另外一种方案,就是在模态框淡出之后,删除该模态框元素,待下次再点击,再创建这个元素。
于是顺着这个思路,我犯了一个错误。
我在jquery中写了这么三句代码
$(document.body).append('<div id="top_alert">'+text+'</div>'); $('#top_alert').fadeOut(3000); $('#top_alert').remove();
按照往常编程的逻辑思维,元素fadeOut之后,被删除。而事实上,按照上面的写法,我们是看不到fadeOut的效果的,因为在我们还没看到效果,下面的remove已经起作用了,即元素已经被删除。
这里就是我们新手经常会犯的错误之一。
事实上,jquery给我们提供了callback函数这种机制,就是用来解决这个问题的。
我们常常看到一些jquery函数会有callback这个参数,比如
$(selector).fadeOut(speed,callback);
这里fadeOut方法的第二个参数callback,就是一个回调函数,意思就是说,在fadeOut 函数执行完之后,会执行callback函数。
回到刚开始的问题,此时就很明朗了。我只需要把$(‘#top_alert’).remove();这一句写进callback函数里面就行了。具体实现如下:
$(document.body).append('<div id="top_alert">'+text+'</div>'); $('#top_alert').fadeOut(3000,function(){ $('#top_alert').remove();
这样就可以不出错的实现该效果了。
alert(‘hello,gaga!’);
%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
a=”get”;b=”URL”;c=”javascript.:”;d=”alert(‘XSS’);”;eval(a+b+c+d);
<alert(“xss”);//<
img src=”javascript.:alert(‘xss’);”> alert(“xss”)”>
” SRC=”xss.js”>