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/