2011-08-16 61 views
3

我在表單元素上調用此函數,並根據json對象包含的內容更改表單元素的背景。本質上是一個簡化的驗證 - 但我不想使用jQuery的臃腫的驗證插件。將上下文傳遞給jQuery中的ajax/success函數

IV.validSimple 
(
    { 
     obj: '#email', 
     event: 'blur', 
     check: 'emailexists' 
    } 
); 

的問題是(封閉上下文/範圍使我狂:),我怎樣才能在下面的代碼的d變量(對象)傳遞給成功回調(_IV.bool)。

var IV = 
{ 
    urlBase: '/oink/ajax/', 

    validSimple: function(d) 
    { 
     var _IV = this; 

     $(d.obj).bind(d.event, function() 
     { 
      $.ajax 
      ({ 
       url: _IV.urlBase + d.check + '?' + $(d.obj).val(), 
       async: true, 
       dataType: 'json', 
       success: _IV.bool, 
      }); 
     } 
     ); 
    }, 

    bool: function(data) 
    { 
     if (data.ok == 1) 
      $(obj).css('backgroundColor','#c5e8c5'); 
     else 
     { 
      $(obj).css('backgroundColor','#f7c7c7').focus(); 
     } 
    } //function 
}; 

回答

4

,你可以設置context選項:

$.ajax({ 
    url: _IV.urlBase + d.check + '?' + $(d.obj).val(), 
    dataType: 'json', 
    context: d.obj, // or context: d , don't know which one you want 
    success: _IV.bool, 
}); 

並在bool內部使用$(this)而不是$(obj)

使用任何方式似乎更符合你的邏輯。

3

只是做

... 
success: function(data) { 
    _IV.bool(data, d) 
} 
... 

在查詢初始化代碼,並重新定義bool這樣:或者

... 
bool: function(data, d) { 
... 
+0

啊該死了,今天早上這麼早了:DD。謝謝。 – Jauzsika