jQuery中将上下文传递给ajax/success函数

3
我在表单元素上调用此函数,根据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
};
2个回答

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) {
...

啊,糟糕,这里的时间太早了 :DD。谢谢。 - Jauzsika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接