2011-02-28 53 views
1

我正在學習新的jQuery $ .ajax回調語法。
問:如果我移動$('td.showcities')點擊函數之外的req.success,那麼我應該如何引用$ tr?jQuery 1.5 AJAX語法

// When the user clicks on a state, the list of cities will appear. 
$('td.showcities').click(function(){ 
    var $tr = $(this).closest('tr'); 
    var StateID = $tr.data('StateID'); 
    var StateName = $(this).next().text(); 
    var req = $.ajax({ 
     url: 'Remote/City.cfc?queryFormat=column' 
     ,data: { 
      method:'WhereStateID' 
      ,returnformat:'json' 
      ,StateID:StateID 
     } 
    }); 
    req.success(function(result){ 
     $('.highlight').removeClass('highlight'); 
     $('.err').removeClass('err'); 
     if (result.MSG == '') { 
      $tr.addClass('highlight'); 
      var qryCity = result.qry.DATA; // Normalize 
      qryCity.RecordCount = result.qry.ROWCOUNT; // Normalize 
      qryCity.ColumnList = result.qry.COLUMNS; // Normalize 
      var TableData = ''; 
      for (var i = 0; i < qryCity.RecordCount; i++) { 
       TableData 
       +='<tr data-CityID="' + qryCity.CITYID[i] + '">' 
       + '<td>' + qryCity.CITYNAME[i] + '</td>' 
       + '</tr>'; 
      }; 
      $('#cities tbody').empty().append(TableData); 
      $('#cities thead th').text(StateName); 
     } else { 
      $tr.addClass('err'); 
      $('#msg').text(result.MSG).addClass('err'); 
     }; 
    }); 
}); 

回答

1

在衆多不同的事情可以做,可能是最方便的是傳遞$tr變量作爲context選項將ajax電話:

var req = $.ajax({ 
    url: 'Remote/City.cfc?queryFormat=column' 
    ,data: { 
     method:'WhereStateID' 
     ,returnformat:'json' 
     ,StateID:StateID 
    }, 
    context: $tr 
}); 

在你的成功回調的$tr值將變成this變量:

req.success(success); 

... 

function success(result){ 
    $('.highlight').removeClass('highlight'); 
    $('.err').removeClass('err'); 
    if (result.MSG == '') { 
     this.addClass('highlight'); // <--- 
    ... 
+0

這很奇怪:當我使用上下文時,然後我失去了以下事件:.ajaxSend,.ajaxSuccess,.ajaxComplete。 – 2011-02-28 19:15:54

+0

想想看,成功和錯誤方法必須與聲明req變量的位置處於同一級別,所以我不妨將它們全部留給點擊事件。 – 2011-02-28 22:28:43