我在表单元素上调用此函数,并根据json对象包含的内容,更改表单元素的背景.本质上是一个简化的验证 – 但我不想使用jQuery的膨胀验证插件. IV.validSimple( { obj: '#email', event: 'blur', check:
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 };或者,您可以设置上下文选项:
$.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).
使用任何看起来更合乎逻辑的方式.