1

私はjscriptオブジェクトを持っています。div にいくつかの html を挿入し、jquery クリック イベント関数内のオブジェクトのメソッドとプロパティにどのようにアクセスできるかによって、イベント クリックを html ラベルにアタッチしようとします。

HTML コード:

<div id="content"></div>

JAVASCRIPT コード:

<SCRIPT ...
jQuery().ready(function (){
    obj=new myobject("myobject1","#content"); //create object instance
    obj.dohtml(); //call method dohtml
});

//object I pass an objectname and a id from an html element 
function myobject(objectname,htmlid){

    this.name=objectname; //name of object 
    this.htmlid=htmlid;   //id where i try to create some html

    //say hello
    this.hello=function(){
       alert(hello); 
    }

    //do something with html
    this.dohtml=function(){

    //create an <p> element in a the html with id=htmlid 
    $(this.htmlid).html('<p id="'+this.name+'_myp" > my text </p>')     

    //click event on <p> id= this.name+'_myp"
    $("#"+this.name+'_myp').click(function(){
        alert(this.name); //i try to access property this.name in the object and dont work
        //how can access to this property from here

        this.hello(); //how can access to this method from here

    });

    $("#"+this.name+'_myp').click(this.hello()); //this dont work too why?

 } 

}
4

1 に答える 1

2

コールバック内でスコープが変更されるため、 var を保存clickしておく必要があります。this

var that = this;
$("#"+this.name+'_myp').click(function(){
    alert(that.name); //i try to access property this.name in the object and dont work
    that.hello(); //how can access to this method from here
}); 

2 番目の部分:

関数を実行し、そのときに戻り値を渡します。関数を渡しthis.hello()たいだけの場合は、this.hellono で渡します。()

$("#"+this.name+'_myp').click(this.hello);

thisあなたはまだ範囲内にいるので、それはうまくいきます。

于 2012-09-01T20:29:29.490 に答える