1

私はこのような機能を持っています:

$(document).ready(function () {
    listproject() ;
});

listproject()ドキュメントに追加した順序付けられていないリストの文字列を返す関数です。ここまではすべて問題ありません。HTML ビューに正しいリストがあります。

listproject()最初の値を表示するためのコード行を追加した直後です<li>が、結果として未定義です。

$(document).ready(function () {
    listproject() ;
    alert($('li:first').val());
});

JavaScript コンソールにログインしてウォッチ式を選択すると、jQuery オブジェクト$('li:first')が存在します。

ここに、あなたのリクエストに続くリストプロジェクトの私の戻り文字列があります

<ul><li id="205">205<ul><li id="206">206<ul><li id="208">208</li><li id="209">209</li><li id="211">211<ul><li id="212">212</li><li id="213">213</li></ul></li></ul></li><li id="207">207<ul><li id="210">210</li></ul></li></ul></li></ul> 

この戻り値を html コードの既存の div に追加します。これが listproject() 関数の実行であり、結果は ok です。

編集:

あなたのリクエストの後、ここに私の関数 listproject() があり、その後に makeTree 関数が続き、 listproject() に順序付けられていないリストの文字列を返します:

function listproject() {
   $.post("/portail/project/home/getProjectList",
        function (d) {

            var pl = $("#tree").empty();

            if (d.length == 0) {

                pl.append($("<div>").addClass("align_center").html("there is no project"));
                return;
            }
           pl.append(makeTree(d,0));

      },
        "json"
    );


}

 function makeTree( a,level) {
            r = '' ;
            for ( i in a ) {
            if (a[i]['parentid'] == level ) {
            r = r + '<li id='+'"'+a[i]['id']+'"'+'>'+ a[i]['name'] + makeTree(a,a[i]['id'] ) + '</li>';
            }
           }
           if (r==''){r=''; }  

           else { r= '<ul>' + r + '</ul>' ;}

           return r;
            }

これで、応答するためのすべての要素が揃い、もう一度考え直します。

4

4 に答える 4

1

val はフォーム要素の値を返すため、テキストまたは html を使用する必要がある場合に備えて、input select textarea のような要素のみがその関数で何かを返します。

alert($('li:first').text());

また

alert($('li:first').html());
于 2013-08-14T12:30:41.287 に答える
1

Aには aliがありません- そのメソッドは、フィールドval()の値を取得するために使用されます(や aなど) 。inputselect

あなたはおそらくしたいです.html()

alert($('li:first').html());
于 2013-08-14T12:29:40.820 に答える
1

$('li:first')その部分は有効だと思いますが、.val()ビットはそうではありません。チェックボックスや選択などのフォーム項目で動作するはずです。.val()ドキュメントを参照してください。

試してみる$('li:first').text()$('li:first').html()

編集:まだ未定義のエラーが発生する理由は、リスト要素が AJAX 要求に追加されているためです。名前が示すように、非同期で行われるため、POST が完了する前にアラートが呼び出されます。

そのため、post 呼び出しが完了したにアラートを呼び出していることを確認する方法が必要です。基本的な方法は、渡した匿名関数の一部としてです。

function listproject() {
  $.post("/portail/project/home/getProjectList",
    function (d) { 
      /* [your existing code here] */

      // That's all done, so now I can query it...
      alert($('li:first').text());
    }
  });
}

または、遅延を使用します(はるかに優れています):

function listproject() {
  $.post("/portail/project/home/getProjectList",
    function (d) { 
      /* [your existing code here] */
    }
  }).done(function() {
      // That's all done, so now I can query it...
      alert($('li:first').text());
  });
}

ここでのもう 1 つの微調整は、listproject が deferred を返すようにし、その関数の外で使用できるようにすることです。

function listproject() {
  var deferred = $.post("/portail/project/home/getProjectList",
    function (d) { 
      /* [your existing code here] */
    }
  });
  return deferred;
}
var deferred = listproject();
deferred.done(function() {
   // That's all done, so now I can query it...
   alert($('li:first').text());
});
于 2013-08-14T12:29:49.627 に答える
1

li要素に価値はありません。コンテンツを取得するには、.html()代わりにメソッドを使用します。

于 2013-08-14T12:29:55.020 に答える