在以前的公司並無遇到這個問題,也就沒有深究。直到本身換了如今的公司,剛來次日就開始寫別人寫到一半的項目,很無奈,不是原生就是jquery,因爲項目急,已經來不及切換框架從新佈局,只能繼續了。
處處都是列表,處處都是js建立的動態頁面,好吧,那我也繼續吧,忽然,意外發生了。 我綁定的click事件無效。
當時知道的緣由是動態建立的元素在初始化的時候尚未,那我綁定的事件怎麼可能綁定的上嘛( 當時還不知道直接綁定和經過on()綁定click的區別,也不知道on('click',param,param,callback)下面介紹的用法)
<p>解決方法html
$("#list").on('click',function(e){ var ev = e || window.event; var target = ev.target || ev.srcElement; if (target.nodeName.toLowerCase() == 'a' && target.className=='reset') { msgconfirm('','是否確認重置密碼?',function(){ ajax('/user/reset?id='+target.type,'','get','json',null,function(data){ var userObj=data.tUser; tipalert('',{ data:'密碼重置成功', username:userObj.account, password:userObj.passWord, uKey:userObj.key.replace(/\,/img,'</br>') },'../../images/ok-ico.png',function(){ window.location.reload(); }) }) }) } })
jquery+原生,我也不想的,但是我又找不到別的解決方案,解決就OK了,雖然很差看,性能也不是太好,可是我也沒有深究。
。。。。。。。。。。node
那就是如今啦,看到別人的代碼
$("body").on("keyup","#userId,#password",function(){ if(event.keyCode==13){ loginFunc(); } });
我真的想對本身說「what are you 弄啥嘞」。
當時真的是沒想那麼多啊。在網上查了一下都說on('click',callback)適用於動態元素,click適用於靜態元素。可是並無說爲何。上面廢話一大堆,下面我說一下個人理解吧。
頁面初始化jquery
變量ajax
函數json
on('click',callback)和click在初始化時的區別app
<html> <div class="test"> <button class="new" id="newon">NewOn</button> <button class="new" id="newclick">NewClick</button> <ul class="li"> <li>原先的HTML元素on<button class="deleteon">Delete</button></li> <li>原先的HTML元素click<button class="deleteclick">Delete</button></li> </ul> </div> <script> $("#newclick").click(function(){ $(".li").append('<li>動態添加的HTML元素click<button class="deleteclick">Delete</button></li>'); }); $("#newon").click(function(){ $(".li").append('<li>動態添加的HTML元素on<button class="deleteon">Delete</button></li>'); }); $(".delete").click(function(){ $(this).parent().remove(); }); //刪除選中元素 $(".li").on('click', ".deleteon", function(){ $(this).parent().remove(); }) //看看,刪除不了吧 $(".deleteclick").click(function(){ $(this).parent().remove(); }); </script> </html>
關於用法,上面已經介紹了,這個也是我今天才知道的,原來在綁定事件的時候就能夠加入元素,而我居然轉到了原生,一看就很菜,小白啊小白。
動態元素綁定用on(),靜態元素綁定二者均可以,爲了代碼的統一仍是都用on()吧,切記,on('click',param1,param2,callback)能夠篩選元素哦!!!