10

$container の '.box' クラスにアクセスしようとすると、ajax 呼び出し内で (this) を使用しても機能しません。

$container.on(
        "click",
        ".box",
        function(event){
            var description;
            if($(this)[0].style.width == '70%'){
                $(this).find(".resultData").fadeOut('slow');
                $(this).css('width', '18%');
            }else{
                $.ajax({
                    url:'scripts/php/fetchResultsData.php',
                    data: {action:value},
                    type: 'post',
                    dataType: 'json',
                    success: function(data){
                        description = data[0];
                        $(this).css('width', '70%');
                        $(this).append("\
                            <div class='resultData'>\
                                <div class='resultName'>" + $(this).find("p").html() + "</div>\
                                <div class='resultDesc'>" + description +"</div>\
                            </div>");
                        /*alert($(this).find("p").html());*/
                    }
                    })
            }
            $container.masonry('reload');
        }
    );

何をしようとしているのかわからない場合は、動的要素の css を変更しようとしています。しかし、例えば、

$(this).css('width','70%');

CSSをまったく調整していません。ajax,success セクションの外に移動すると機能しますが、「説明」を取得できません。

4

2 に答える 2

18

あなたは近くにいます。使用しているコンテキストでの「これ」は、イベントを発行したものではなく、ajax リクエストを指します。これを修正するには、ajax リクエストを行う前に次のコピーを保存します。

                   }else{
                        var me = this;
                        $.ajax({
                            ...
                            success: function(data){
                                description = data[0];
                                $(me).css('width', '70%');
于 2012-07-21T19:35:36.113 に答える
11

$.ajaxこれを通話に追加するだけです...

context: this,

...そしてそれはうまくいくでしょう。


$.ajax({
    context: this, // <-- right here
    url:'scripts/php/fetchResultsData.php',
    data: {action:value},
    type: 'post',
    dataType: 'json',
    success: function(data) { // ...

于 2012-07-21T19:48:40.030 に答える