Bleh.

When I pass a function in via the plugin's method with the below code, it
doesn't recognize the "this" scope anymore.  Am I not passing the function
in correctly?

$('input:[EMAIL PROTECTED]').each( function() {
        $(this).autoSave(function(){
                $.AjaxCFC({
                url: "some.cfc",
                method: "updateAttendee",
                data: {
                        fid:this.id,
                        field:this.id.split("_")[0],
                        id:this.id.split("_")[1],
                        value:this.value},
                success: function(r){}
        });
});



Blair Mitchelmore-2 wrote:
> 
> Functions in JavaScript run at a certain scope. A lot of the time, if 
> the function isn't a part of some Object that scope defaults to the 
> window object. All JavaScript functions also have two functions that 
> allow you to redefine the scope of a function as you call it: apply and 
> call. apply takes 2 arguments: the new scope to call the function under 
> and an array of arguments to call the function with. call does the same 
> thing but instead of an array of arguments, you just supply the 
> arguments as additional arguments to that function call.
> 
> Example:
> var scope = "Scope";
> var arg = "Arg";
> var fn = function(e) {
>     window.alert(this + " => " + e);
> };
> fn(arg); // alerts " => Arg"
> fn.apply(scope,[arg]); // alerts "Scope => Arg"
> fn.call(scope,arg); // alerts "Scope => Arg"
> 
> This allows you to redefine the this variable on the fly. Additionally, 
> the reason self is used rather than this in fn.apply(self) is because 
> 'this' changes scope once you enter a new function. So inside the 
> anonymous function defined in the setTimeout call, the scope variable 
> 'this' is likely to be the window object. So you have to save a 
> reference to the 'this' you want to use as a separate variable so it can 
> be referenced elsewhere: hence self = this followed by (inside the 
> anonymous function) fn.apply(self).
> 
> -blair
> 
> Daemach wrote:
>> Yeah that worked.  I'm not certain I understand why though :)
>>
>> It does make sense that the closure would actually have to be created
>> inside
>> the event handler but .apply(self) is a new one for me.  What exactly is
>> that doing?
>>
>>
>> Blair Mitchelmore-2 wrote:
>>> $(document).ready( function() {
>>>     var timer;
>>>     var fn = function(e) {
>>>             if (e && e.type == 'blur') {
>>>                     if (timer)
>>>                             window.clearTimeout(timer);
>>>             }
>>>             // Do stuff
>>>             alert(this.id);
>>>     }
>>>     $('#test').blur(fn).keyup(function() {
>>>                     var self = this;
>>>                     timer = window.setTimeout(function() {
>>>                             fn.apply(self);
>>>                     },2000);
>>>     }).keydown(function() {
>>>             if (timer) window.clearTimeout(timer);
>>>     });
>>> });
> 
> _______________________________________________
> jQuery mailing list
> [email protected]
> http://jquery.com/discuss/
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Gmail-style-updates-tf3269331.html#a9124502
Sent from the JQuery mailing list archive at Nabble.com.


_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/

Reply via email to