今天寫代碼的時候出現了一些問題。首先我的html文件是這樣的
<div id = "tag_add" onclick="addUser()"></div>
恩恩,很清楚,調用了addUser()方法
var addUser = function () { var i=0; document.onkeydown = function(e){ var ev = document.all ? window.event : e; if(ev.keyCode==13) { submit_dialog(); } if(ev.keyCode==27) { quit_dialog(); } } function quit_dialog (){
/*隱藏了dialog的div*/ } $("#head_close,#bottom_canser").click(function() { quit_dialog(); }); function submit_dialog(){ alert(name+phone+plantNO); } $("#bottom_submit").click(function() { submit_dialog(); }); }
第一次調用,用鼠標點了submit,沒有問題;第二次調用,恩?怎麼alert彈出了兩次??媽蛋的!第三次調用,好吧,alert彈出了三次了!
我立馬想到了onclick調用函數是不是每次都要新建一個函數實例呢?javaEE有單例原型的概念,放到這種情況,應該就是js解釋器每次都是新建了一個函數對象的單例了吧?前一個單例沒有結束而後一個單例又被調用了纔會出現這種問題??(這裏求解啊!!)
於是我加了一段代碼求證
var addUser = function () { var i=0; document.onkeydown = function(e){ var ev = document.all ? window.event : e; if(ev.keyCode==13) { submit_dialog(); } if(ev.keyCode==27) { quit_dialog(); } } function quit_dialog (){ /*隱藏了dialog的div*/ } $("#head_close,#bottom_canser").click(function() { quit_dialog(); }); function submit_dialog(){ alert(name+phone+plantNO); } $("#bottom_submit").click(function() { submit_dialog(); i++; console.log(i); }); }
然後查看了一下我的控制面板
恩,跟我想的一樣!的確是新建了新的實例。正當我確認是這樣的以後,卻發現,用按鍵觸發不會發生這些問題!是因爲 var addUser = function () {} 這個每次訪問的都是原型麼?不懂求解啊!
很容易的想到了搜索js的原型怎麼使用,prototype。以前略有耳聞,後來好久沒寫忘了...
問題還沒解決,如果有高手解答不勝感激啊!
//-------------------------------------------------------------------------------------------------------------------------------------------
//2014.10.30
其實很簡單,事件綁定了多次而已...