2010-03-01 59 views
3

In an earlier question我制定了如何将object作为properties存储。 现在我要当object通过事件传递给访问这些properties但无法得到它的工作:jQuery - 从传递给事件的另一个对象中访问对象属性

<script language="javascript"> 
$(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 
    }; 
}); 
</script> 
<body> 
    <form id="form1" runat="server"> 
     <div id="test">Here is a test div</div> 
    </form> 
</body> 

回答

2

这会为你工作,其附加到元素,而不是作为一个参考这似乎稍微改变元素(这是一个不同的.data()电话,see here for info):

$(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); 
    }; 
}); 
1
//clearly TestObject is no longer attached to the div, why? 

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

+0

这也行不通,在'jQuery.data()'你存储的DOM元素的引用仍然不一样...在正常情况下,你不应该使用'jQuery .Data()',而是'.data()'。 – 2010-03-01 12:54:57

相关问题