2010-07-30 25 views
10

Jak mogę przekazać $ to (słowa kluczowego self) do funkcji w jQuery

$(document).ready(function() { 

    $('.nav a').click(function() { 
     var direction = $(this).attr("name"); 
     submit_form($(this)) 
    }); 

    function submit_form(this) 
    { 
     // do some stuff with 'this' 
    }  
}); 
+4

Już to robisz poprawnie. Wystarczy zmienić nazwę zmiennej w 'function submit_form (this) {}' na coś innego jak 'function submit_form (element) {}'. –

+1

Proszę używać javascriptu w sposób, w jaki zamierzano go używać (nie trzeba przekazywać kontekstu jako parametru): 'submit_form.call (this)', 'submit_form.apply (this)', lub nawet używać jQuery, jeśli to jedyna rzecz rozumiesz: 'jQuery.proxy (submit_form, this)' –

Odpowiedz

16

otoczenie go $() czyni go jQuery obiekt. Będziesz chciał zrobić coś w rodzaju:

submit_form(this); 

function submit_form(obj) 
{ 
    // Work with `obj` as "this" 
    // Or wrap it in $() to work with it as jQuery(this) 
} 
+1

$ (ważny punkt!) –

1

Spróbuj tego:

$(document).ready(function() 
    { 
     $('.nav a').click(function() { 
      var direction = $(this).attr("name"); 
      submit_form(this); 
     }); 

     function submit_form(myObject) 
     { 
      // do some stuff with 'myObject' 


     }   

    }); 
0

Po prostu przekazać go jako normalną zmienną?

function submit_form(context) 
{ 
    context.html("Boo!"); 

} 

/// Then when you call it: 
submit_form($(this)); 
5

this Hasło nie może być ustawione w JavaScript. Jest automatycznie generowany przez JavaScript i "zawsze odnosi się do" właściciela "funkcji, którą wykonujemy, lub raczej do obiektu, którego funkcja jest metodą".
http://www.quirksmode.org/js/this.html

masz jeden problem w kodzie (próbując wymienić parametr funkcji submit_form() do tego). Jednak sposób, w jaki układany jest kod, nie wyjaśnia, czy zamierzasz przekazywać zakotwiczoną klikniętą jako obiekt jQuery lub jako węzeł DOM dla zakotwiczenia.

$(document).ready(function() { 
    $('.nav a').click(function() { 
     $anchor = $(this);      // Capture the jQuery-wrapped anchor for re-use; 'this' is an anchor because it matched $('.nav a') 
     var direction = $anchor.attr("name"); // $variable_name is a standard pattern in jQuery to indicate variables that are jQuery-wrapped instead of DOM objects 

     submit_form_jquery($anchor);   // Providing versions of submit_form function for passing either jQuery-wrapped object or DOM object 
     submit_form_dom(this);     // Pick the one you prefer and use it 
    }); 

    function submit_form_jquery($my_anchor) { // Function with well-named parameter expecting a jQuery-wrapped object 
     // do some stuff with '$my_anchor' 
     // $my_anchor here is assumed to be a jQuery-wrapped object 
    } 

    function submit_form_dom(anchor) {   // Function named expecting a DOM element, not a jQuery-wrapped element 
     // do some stuff with 'anchor' 
     // anchor here is assumed to be a DOM element, NOT wrapped in a jQuery object 
    } 
}); 

Na większości niepowiązanych notatki, prawdopodobnie będziesz chciał albo return false; lub użyj event.preventDefault(), aby utrzymać stronę z po href na kotwicy, który został kliknięty. Możesz to zrobić w następujący sposób:

$(document).ready(function() { 
    $('.nav a').click(function(event) { 
     event.preventDefault(); 
     // And now do what you want the click to do 
    }); 
}); 
1

Oto, co sprawdziło się u mnie.

$(document).ready(function() 
{ 
    $('.nav a').click(function() { 
     submit_form(this) 
    }); 

    function submit_form(thisObject) 
    { 
     var direction = $(thisObject).attr("name"); 
    }  
}); 
1

Tak, to można ustawić łatwo. Zobacz Function.call() i Function.apply().

Powiązane problemy