0

リンク付きのHTMLページがあります

ユーザーがそのリンクをクリックすると、新しい選択タグが表示されます

htmlコード

<div class="container" id="addCell">
    <ul class="containerUL">
        <li class="containerLI">
            <p>
                <label>Name</label>
                <input type="text" class="longInput1"/>
            <p>
            <p>
                <label>City</label>
                <select id="countrySelector">
                </select>
            </p>
        </li>
        <li class="containerLI">
            <p>
                <label>Inserted cells</label>
                <a href="#" class="smallLink" id="acaclink">new</a>
            </p>
        </li>
        <li class="containerLI">
            <input type="submit" class="button1" value="save"/>
        </li>
    </ul>
</div>

jqueryコード

$("#addCell").ready(function(){
    $("#addCell").on('click',"#acaclink",function(){
        $.getJSON("http://localhost/Mar7ba/Cell/getAllCells/TRUE",function(data){
            var options = '';
            options+="<option>select cell</option>";
            for(var i=0;i<data.length;i++){
                options += "<option>"+data[i]+"</option>";
            }
            $(this).closest('li').append('<p>\n\
            <label>Select Cell</label>\n\
            <select name="acSelect[]">\n\
             '+options+'\n\
</select>\n\
            </p>');
        });
    });
});

1-私はJSON呼び出しをチェックしていますが、エラーはありません2-私はアラートオプションであり、希望どおりに機能します

私の質問は:私がそれを置き換えるとき$(this).closes('li')それ$('ul').append は機能しますが、私が最も近いliを置くときそれは機能しません。間違いはどこにありますか

4

2 に答える 2

5

これは、$(this)内部匿名関数が別のスコープを持ち、別のオブジェクトを参照しているためです

$("#addCell").ready(function(){
    $("#addCell").on('click',"#acaclink",function(){
        var me = this; // we use "me" as a closure to the object we clicked at

        $.getJSON("http://localhost/Mar7ba/Cell/getAllCells/TRUE",function(data){
            var options = '';
            options+="<option>select cell</option>";
            for(var i=0;i<data.length;i++){
                options += "<option>"+data[i]+"</option>";
            }
            $(me).closest('li').append('<p>\n\   // <---- here we use "me"
            <label>Select Cell</label>\n\
            <select name="acSelect[]">\n\
             '+options+'\n\
</select>\n\
            </p>');
        });
    });
});
于 2012-05-17T23:54:31.937 に答える
1

thisコールバック内では異なる意味を持ちgetJSONます。

の外部に参照を保持してから、getJSON内部で使用できます。

$("#addCell").ready(function(){
    $("#addCell").on('click',"#acaclink",function(){

        var that = this; // reference this

        $.getJSON("http://localhost/Mar7ba/Cell/getAllCells/TRUE",function(data){
            var options = '';
            options+="<option>select cell</option>";
            for(var i=0;i<data.length;i++){
                options += "<option>"+data[i]+"</option>";
            }

              // use it here
            $(that).closest('li').append('<p>\n\
            <label>Select Cell</label>\n\
            <select name="acSelect[]">\n\
             '+options+'\n\
</select>\n\
            </p>');
        });
    });
});

または、$.ajaxとそのcontextプロパティを使用します。

    $.ajax({
        url:"http://localhost/Mar7ba/Cell/getAllCells/TRUE",
        context:this,
        dataType:'json',
        success: function(data){

          // your code
            $(this).closest('li').append('<p>\n\...'

        }
    });

これは単なるラッパーであるため、これはコードと同等getJSONですが、のようなすべてのオプションを利用できますcontext:

于 2012-05-17T23:54:54.390 に答える