0

次のスニペットを検討してください。

$('.job-details-apply').live('click', function () {
    var url = $('#apply-job-url').val();
    var id = $(this).attr('value');
    var selected = $(this);
    $.ajax({
        url: url,
        data: { id: id },
        success: function (data) {
            $(selected).html('Test!');//selected is undefined at this point
        },
        error: function () {
        }
    });
    return false;
});

var selected、成功ハンドラでは定義されていません。クリック機能の範囲外にする必要がありますか? 例えば

var selected = null;
$('.job-details-apply').live('click', function () {
    selected = $(this);
    //blah
}

それについて何かが正しくないように思えます。

編集: コントローラーから返された値に違いがある場合は、ID a JsonResult(現時点では単なる bool です)

4

3 に答える 3

3

selected変数の宣言方法を変更する必要はありません。ajax 関数の成功ハンドラーで問題なく使用できます。

jQuery ajax 成功ハンドラーで時折混乱する点として、この問題の原因ではありませんが、ajax 成功ハンドラーでは の値thisが異なります (それは ajax オブジェクトを指します) が、変数へのアクセスには影響しません。を使用せずに直接利用できるため、親関数で宣言されていますthis

したがって、あなたが尋ねていることは問題ではないので、実際にselected変数に問題がある場合、その原因は、これまでに示したコードで私たちに開示していない別のものに違いありません. おそらく、この問題が発生している場所のより完全な例、またはブレークポイントを設定して物事を調べることができるように作業ページへのリンクを表示する必要があります.

于 2012-08-25T02:16:57.890 に答える
0

あなたがするとき

var selected = $(this);

selectedは、クリックした要素から構築された jQuery オブジェクトになりました (thisはクリックした要素の DOM オブジェクトです。jQuery メソッドはありselected ません。jQuery メソッドを取得します)。

$.ajax({
    url: url,
    data: { id: id },
    success: function (data) {
        $(selected).html('Test!');//selected is undefined at this point

selectedこれはクロージャーに組み込まれた外部変数であるため、この時点で確実に定義する必要があります。ただし、$(selected)すでに jQuery オブジェクトであるものを jQuery コンストラクターに渡そうとする試みに解決されます。jQuery コンストラクターは通常、DOM オブジェクト (jQuery オブジェクトに変換)、HTML 文字列 (対応する DOM フラグメントを構築して jQuery オブジェクトに変換する)、関数 (DOM がロードされたときに実行する)、または拡張 CSS セレクター (ページ内の 1 つ以上の要素を表す jQuery オブジェクトに変換する)。したがって、の結果$(selected)は公式には定義されていません。

明らかにこれが問題の原因である場合、コードを変更するとselected.html(...)、少なくとも異なる結果が得られ、できればうまくいくはずです。}、

于 2012-08-25T09:06:36.813 に答える
-1

thisはい、変数に格納する必要があります。

$('.job-details-apply').live('click', function () {
  var url = $('#apply-job-url').val();
  var id = $(this).attr('value');
  var _this = this;
  $.ajax({
      url: url,
      data: { id: id },
      success: function (data) {
          $(_this).html('Test!');
      },
      error: function () {
      }
  });
  return false;
});
于 2012-08-25T02:27:54.283 に答える