2012-07-16 91 views
0

我想創建一個對象類,將採取數據並創建一個元素列表。我也想在新的LI上附加一個點擊事件來激發這個類的一個方法。然而,使用jQuery的:如何將一個事件附加到類中新創建的元素

el.click(function() { 
    this.method(); 
}); 

this沒有再引用的類時,那麼點擊li給你一個未定義的方法錯誤。關於如何將類方法附加到新創建的元素的建議?

JS代碼:

if (typeof Object.create !== 'function') { 
    Object.create = function(o) { 
     function F() {} 
     F.prototype = o; 
     return new F(); 
    }; 
} 

var base = { 
    init: function(data) { 
     this.data = data; 
     this.show_data(); 
    }, 


    show_data: function() { 

     for (i = 0; i < this.data.bindings.length; i++) { 

      var $item = $('<li>' + this.data.bindings[i].ircEvent + '</li>'); 
      $item.click(function() { 
       this.show_clicked(i); 
      }); 
      $('#it').append($item); 
     } 
    }, 

    show_clicked: function(index) { 
     console.log('clicked in method'); 
    } 
}; 

var extended = { 

    show_alert: function() { 
     alert('second class'); 
    } 
}; 


var myObj = { 
    "bindings": [ 
     { 
     "ircEvent": "PRIVMSG", 
     "method": "newURI", 
     "regex": "^http://.*"}, 
    { 
     "ircEvent": "PRIVMSG", 
     "method": "deleteURI", 
     "regex": "^delete.*"}, 
    { 
     "ircEvent": "PRIVMSG", 
     "method": "randomURI", 
     "regex": "^random.*"} 
    ] 
}; 

$(document).ready(function() { 

    var baseObj = Object.create(base); 
    baseObj.init(myObj); 

}); 

小提琴:http://jsfiddle.net/kmfstudios/EwC3r/5/

+0

你撥弄甚至不與基碼的工作,顯示了數據的屬性「綁定」的錯誤。您需要刪除小提琴上的包裝,這會導致您的對象在您的$(document).ready()調用 – Jlange 2012-07-16 19:02:09

+0

查看[.on](http://api.jquery.com/on/)之前被初始化,它應該有助於您的點擊綁定 – MrOBrian 2012-07-16 19:07:06

+0

最初修復了小提琴複製的錯誤鏈接。 – Conor 2012-07-16 19:17:57

回答

1

爲了使你的方法工作的點擊功能,只需引用包含對象的全局變量。

行:

this.show_clicked(i); 

應改爲:

base.show_clicked(i); 

如果你想顯示在最終結果的指標值,你就必須要麼傳遞數據,或者使用jQuery來確定哪個索引被點擊。

這裏有一個更新的小提琴的作品 - http://jsfiddle.net/EwC3r/4/

相關問題