【问题标题】:Passing context to ajax/success function in jQuery将上下文传递给 jQuery 中的 ajax/success 函数
【发布时间】:2011-08-16 09:35:51
【问题描述】:

我在表单元素上调用这个函数,并根据json对象包含的内容,改变表单元素的背景。本质上是一个简化的验证——但我不想使用 jQuery 臃肿的验证插件。

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
};

【问题讨论】:

    标签: jquery callback scope


    【解决方案1】:

    或者,您可以设置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)

    使用任何你认为更合乎逻辑的方式。

    【讨论】:

      【解决方案2】:

      只是做

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

      在您的查询初始化代码中并以这种方式重新定义bool

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

      【讨论】:

      • 啊该死,这里的早上太早了:DD。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      相关资源
      最近更新 更多