передача аргументов при вызове функции jquery - PullRequest
3 голосов
/ 31 июля 2010

эй, я пытаюсь вызвать функцию jquery и передать ей несколько аргументов в виде

$('#button').mouseenter(exampleFunction(arg1,arg2));

function exampleFunction(arg1,arg2)

Функция отлично работает без аргументов, написанных вот так.

$('#button').mouseenter(exampleFunction);

function exampleFunction;

но как только я добавлю (), чтобы аргументы в функции перестали работать.

как это:

$('#button').mouseenter(exampleFunction());

Кажется, что это какая-то синтаксическая ошибка jquery с моей стороны

вот фактический код

    <script type="text/javascript">

$(document).ready(function() {
$('.section').mouseover(function(){
  $('#nav2').fadeOut(0).animate({"height":"30px"}, 250);

         });


$('#section1').hover(navSelect);

function navSelect(){
  if ( $('.interior').is(':hidden')){
  $('.subSection').fadeOut(250);
  $('.interior').delay(250).fadeIn(250);
  $('#selector').animate({"left":"0px"},250);
  }}


$('#section2').mouseenter(function(){
  if ( $('.exterior').is(':hidden')){

  $('.subSection').fadeOut(250);
  $('.exterior').delay(250).fadeIn(250);
  $('#selector').animate({"left":"100px"},250);
  }
});
$('#section3').mouseenter(function(){
  if ( $('.view').is(':hidden')){

  $('.subSection').fadeOut(250);
  $('.view').delay(250).fadeIn(250);
  $('#selector').animate({"left":"200px"},250);
  }
});


         });
</script>

Ответы [ 4 ]

5 голосов
/ 31 июля 2010

Функции в JavaScript являются первоклассными объектами. Вы можете поместить их в переменные, вернуть их из других функций и т. Д. Когда вы пишете $('#button').mouseenter(exampleFunction(arg1,arg2));, вы говорите «Запустите exampleFunction с этими аргументами и используйте его возвращаемое значение в качестве обратного вызова».

Чтобы заставить jQuery вызывать функцию с этими аргументами позже, вы можете использовать анонимную встроенную функцию:

$('#button').mouseenter(function() {
    exampleFunction(arg1,arg2)
});

Ваша функция без аргументов будет вызвана и передаст правильные аргументы функции, которую вы на самом деле хотите вызвать. Это своего рода закрытие бедного человека .

1 голос
/ 31 июля 2010

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

try

 mouseenter(function(a,b){....})

там вы определяетефункции и передачи его. Определенная функция принимает 2 аргумента, a и b.

0 голосов
/ 31 июля 2010

Я считаю, что для этого есть плагин jQuery.
Смотрите здесь: http://plugins.jquery.com/

0 голосов
/ 31 июля 2010

функция, с которой вы связываете событие в jQuery, получает объект 'event' из вызова метода jQuery.

jQuery("#button").mouseenter(function(<strong>evt</strong>){[ do something ]});

, если вы хотите сделать что-то вроде

$('#button').mouseenter(exampleFunction(arg1,arg2));

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

function exampleFunction(arg1, arg2){<br/> return function(evt){<br/> jQuery(this).animate({width: arg1, height: arg2},250)<br/> };<br/> }};

чтобы она возвращала функцию, которая связана (и, таким образом, передала объект события), а затем связала ее с элементамикак

jQuery("#button").mouseenter(exampleFunction("50%","50%"))<br/> .mouseleave(exampleFunction("100%","100%");

...