jQuery - доступ к свойствам объекта из другого объекта, который был передан событию - PullRequest
3 голосов
/ 01 марта 2010

В предыдущем вопросе я выяснил, как хранить object как properties. Теперь я пытаюсь получить доступ к этим properties, когда object проходит через событие, но не может заставить его работать:

<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 ]

2 голосов
/ 01 марта 2010

Это будет работать для вас, прикрепите его к элементу, а не как ссылку на элемент, который, кажется, немного меняется (это другой вызов .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);
  };
});
1 голос
/ 01 марта 2010
//clearly TestObject is no longer attached to the div, why?

Поскольку this возвращает контекст вашей функции в этой строке alert(jQuery.data($(this), "obj").testProperty);, вместо него следует использовать alert(jQuery.data($("#test"), "obj").testProperty);.

...