Ответ 1
Обтекание его в $()
делает его объектом jQuery. Вы хотели бы сделать что-то вроде
submit_form(this);
function submit_form(obj)
{
// Work with `obj` as "this"
// Or wrap it in $() to work with it as jQuery(this)
}
Как я могу передать $this (ключевое слово self) функции 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'
}
});
Обтекание его в $()
делает его объектом jQuery. Вы хотели бы сделать что-то вроде
submit_form(this);
function submit_form(obj)
{
// Work with `obj` as "this"
// Or wrap it in $() to work with it as jQuery(this)
}
Ключевое слово this
не может быть установлено в JavaScript. Он автоматически генерируется JavaScript и "всегда ссылается на" владельца "функции, которую мы выполняем, или, вернее, на объект, который функция является методом".
— http://www.quirksmode.org/js/this.html
У вас есть одна проблема в коде (для этого нужно указать параметр функции submit_form()). Тем не менее, способ, которым выкладывается ваш код, не дает понять, собираетесь ли вы пройти по щелкнутому якорю, завернутому как объект jQuery, или как DOM node для якоря.
$(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
}
});
В основном не связанной заметке вы, вероятно, захотите либо return false;
, либо использовать event.preventDefault(), чтобы страница не соответствовала href
на якоре, который был нажат. Вы можете сделать это следующим образом:
$(document).ready(function() {
$('.nav a').click(function(event) {
event.preventDefault();
// And now do what you want the click to do
});
});
Попробуйте следующее:
$(document).ready(function()
{
$('.nav a').click(function() {
var direction = $(this).attr("name");
submit_form(this);
});
function submit_form(myObject)
{
// do some stuff with 'myObject'
}
});
Вот что сработало для меня.
$(document).ready(function()
{
$('.nav a').click(function() {
submit_form(this)
});
function submit_form(thisObject)
{
var direction = $(thisObject).attr("name");
}
});
Да, это можно легко установить. См. Function.call()
и Function.apply()
.
Просто передайте его как нормальную переменную?
function submit_form(context)
{
context.html("Boo!");
}
/// Then when you call it:
submit_form($(this));