2014-01-21 6 views
0

Я новичок в jQuery и пытаюсь выяснить, в чем разница между следующими двумя синтаксисами.разница между функцией jQuery() и функцией (событием)

1. $("#target").keyup(**function(event)** { 
    alert("Event argument"); 
    } 

2. $("#target").keyup(**function()** { 
    alert(" No Event argument"); 
    } 

Html:

input id="target" type="text" 

Есть ли какие-либо различия в добавлении "событие" аргумент в .keyup (определение) ??

+0

нет никакой разницы .. вы передаете аргумент события, если вам нужно что-то делать с событием .. например, предотвращение поведения по умолчанию для события, для получения кода ключа – bipen

+0

Если вы не объявляете * параметр *, тогда, когда функция называется аргументом, будет «потеряна» (или, скорее, не будет напрямую доступна через переменную). Тем не менее, сама функция будет вызываться точно так же - так что если вам не нужен параметр, то это прекрасно, что бы опустить его. – user2864740

ответ

1

Это не имеет никакого значения, если вам не требуется какое-либо событие. В случае события keyup объект event будет содержать keyCode, что очень полезно.

Попробуйте это:

$("#target").keyup(function(event) { 
    alert(event.keyCode); 
} 

Это намного проще работать с console.log, а не alert. Возможно, вам захочется перейти на это, чтобы вам не приходилось всплывать всплывающие окна все время. Просмотрите журнал в инструментах dev (возможно, ключ f12).

Это может помочь вам понять, что происходит лучше:

function foo(yourFunction) { 
    var eventObject = {keyCode: 10}; 
    yourFunction(eventObject); 
} 

foo(function(event) { 
    console.log(event); 
}); 

В этом примере функция foo называется и функция передается в него. foo затем вызывает переданную функцию и передает значение этой функции. Для того, чтобы эта функция использовала его, функция должна дать ему имя. Посмотрите на это:

foo(function() { //now the function doesn't accept any arguments/parameters 
    console.log(event); // what is "event" ??? 
}); 

Аргументы, передаваемые в функцию могут быть доступны с переменной arguments. Для того, чтобы держать с моими предыдущими примерами:

function foo() { //argument name removed 
    var eventObject = {keyCode: 10}; 
    yourFunction(eventObject); //this is now undefined 

    console.log(arguments); 
    //this will be an array 
    //the first value of the array will be the function that was passed in 
} 

foo(function() { //argument named remove 
    console.log(event); //this is also undefined 
    console.log(arguments); 
    //the first value of "arguments" will be the eventObject that was passed in 
}); 

ли вы написать функцию, чтобы принять аргументы или нет, аргументы все еще могут быть переданы ему и доступны с переменной arguments, но если вы нуждаетесь в них, вы должны дать им имя локальной переменной.

Последнее изделие. Неважно, что вы называете аргументом. Вы просто даете ему любое местное имя, которое вы хотите.

$("#target").keyup(function(e) { 
    alert(e); 
} 
$("#target").keyup(function(evt) { 
    alert(evt); 
} 
$("#target").keyup(function(event) { 
    alert(event); 
} 
$("#target").keyup(function(cookieMonster) { 
    alert(cookieMonster); 
} 

Все они делают то же самое. Переменная относится к одному и тому же объекту события, так как это то, что передается.

+0

я смогу получить доступ к event.which во втором варианте? – user2953551

+0

@ user2953551 нет, только если вы его передадите. – m59

+0

$ ("# target"). Keyup (function() { console.log (arguments); } и вы найдете, что аргументы для функции обратного вызова. – jingyinggong

1

Параметры передаются функции независимо. Поместив их в подпись функции, вы создаете локальные переменные для каждого аргумента. Например, это, по сути, одно и то же.

$("#target").keyup(function() { 
    var event = arguments[0]; 
} 

$("#target").keyup(function(event) { 
} 

Если вы не собираетесь на использовании переменной event, то не объявляя это не делает никакого вреда.

Смежные вопросы