遇到的一個JS原型的問題,已經解決

今天寫代碼的時候出現了一些問題。首先我的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

其實很簡單,事件綁定了多次而已...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章