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

发布于 2024-11-29 19:15:23 字数 930 浏览 1 评论 0原文

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

I call this function on a form element, and based on what the json object contains, change the background of a form element. Essentially a simplified validation - but I don't wanna use jQuery's bloated validation plugins.

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

The problem is (the closure context/scope drives me mad :), how can I pass the d variable (object) to the success callback (_IV.bool) in the code below.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦纸 2024-12-06 19:15:23

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

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

Alternatively, you could set the context option:

$.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,
});

and use $(this) inside bool instead of $(obj).

Use whatever way seems more logical to you.

逆光飞翔i 2024-12-06 19:15:23

只需

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

在查询初始化代码中执行以下操作并重新定义 bool 即可:

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

just do

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

in your query initialization code and redefine bool this way:

...
bool: function(data, d) {
...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文