2015-04-09 5 views
0

У меня возникли проблемы с написанием некоторого моего первого кода JQuery. Я экспериментирую с некоторыми материалами Codecademy, просто разбираюсь и вижу, как это работает. Сейчас я довольно запутался в проблеме с анонимными функциями: вызов функции анонимно работает, но называть функцию и вызывать ее по имени нет. Предполагается, что код, щелкнув значок, откройте меню с левой стороны экрана и сдвиньте остальную часть страницы вправо; затем сделайте обратный щелчок по значку закрытия. Первый блок кода работает отлично, второй просто открывает и закрывает меню сразу после загрузки страницы, а затем ничего не делает. Есть ли что-то, что мне не хватает в порядке операций в JS/JQuery или что?анонимная функция с идентичной именованной функцией

Anonymous:

function main() { 
    $('.icon-menu').click(function() { 
    $('.menu').animate({left:'0px'}, 200); 
    $('body').animate({left:'285px'}, 200); 
    }); 
    $('.icon-close').click(function() { 
    $('.menu').animate({left:'-285px'}, 200); 
    $('body').animate({left:'0px'}, 200); 
    }); 
} 

Названный:

function main() { 
    $('.icon-menu').click(open()); 
    $('.icon-close').click(close()); 
} 

function open() { 
    $('.menu').animate({left:'0px'}, 200); 
    $('body').animate({left:'285px'}, 200); 
} 
function close() { 
    $('.menu').animate({left:'-285px'}, 200); 
    $('body').animate({left:'0px'}, 200); 
} 

Благодаря всем, кто может просветить меня.

ответ

1

Вы

$('.icon-menu').click(open()); 

() вызывает функцию.

Вы звоните openсразу, а затем передавая ее возвращаемое значение (undefined) в click.

Удалите () и передайте функцию вместо этого.

+1

Теперь, чтобы найти канонический ду ... –

1

Извлеките круглые скобки. open() и close() вызовите функции, но вы просто хотите передать ссылку на функцию.

function main() { 
    $('.icon-menu').click(open); 
    $('.icon-close').click(close); 
} 
+0

Ahh Я вижу! Спасибо, я знал, что это что-то не так. Но что, если бы у меня была функция с параметрами? – bwgaydon

0

Удалите скобки после функции внутри clickhandler, потому что вы выполняете их emediatly с этим синтаксисом.