jQuery – 从传递给事件的另一个对象中访问对象属性

在之前的一个问题中,我研究了如何将object存储为properties 。 现在我试图在object通过事件但无法使其工作时访问这些properties

  $(document).ready(function() { //create a TestObject function TestObject() { this.testProperty = "green"; } //and an instance of it var testObject = new TestObject(); //attach this instance to the div as a property var test; test = $('#test');//the div jQuery.data(test, "obj", testObject); //prove it worked and the TestObject is assigned alert(jQuery.data(test, "obj").testProperty);//works $('#test').click(TestClick); //test.click(TestClick); doesn't work either function TestClick() { alert($(this).attr("id"));//displays "test" - works alert(jQuery.data($(this), "obj").testProperty); //testProperty is null or not an object?? //clearly TestObject is no longer attached to the div, why? //Or have I attached it the wrong way? //alert(jQuery.data(this, "obj").testProperty); doesn't work either }; });   
Here is a test div

这将适合你,将它附加到元素,而不是作为对似乎稍微改变的元素的引用(这是一个不同的.data()调用, 请参阅此处获取信息 ):

 $(document).ready(function() { function TestObject() { this.testProperty = "green"; } var testObject = new TestObject(); var test = $('#test').data("obj", testObject); alert(test.data("obj").testProperty); $('#test').click(TestClick); function TestClick() { alert($(this).attr("id")); alert($(this).data("obj").testProperty); }; }); 
 //clearly TestObject is no longer attached to the div, why? 

因为this在此行alert(jQuery.data($(this), "obj").testProperty);返回您的函数上下文alert(jQuery.data($(this), "obj").testProperty); 你应该使用alert(jQuery.data($("#test"), "obj").testProperty); 代替。