2012-02-27 4 views
2

Моя проблема: я разрабатываю мобильный сайт с 2 стилями, один для визуализации, ориентированный на ПК, а другой для мобильной визуализации. Наряду с 2 CSS мне нужна функция для изменения некоторых атрибутов href в меню при переходе из одного режима визуализации в другой.Как я могу вызвать функцию несколько раз?

Я не буду углубляться в детали вещей, как это было бы очень долго и, наверное, скучный, во всяком случае мне нужно функцию, чтобы назвать как на $(document).ready И на $(window).resize, что каждый раз, когда окно изменен.

Поэтому я объявил функцию и назвал его goToAnchor для того, чтобы быть в состоянии назвать его несколько раз:

$(document).ready(function() { 
    function goToAnchor() { ... modify some href attr ... } 
    goToAnchor(); 
}); 

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

$(document).ready(function() { 
    function goToAnchor() { ... modify some href attr ... } 
    goToAnchor(); 
    $(window).resize(goToAnchor()); 
}); 

проблема проста, функция не работает на resize. Я проверил документацию JQuery и заметил, что каждый пример в отношении связывания функции на событие записывается следующим образом:

$(window).resize(function() { ...do stuff...}); 

Я бы не прибегать, используя анонимную функцию, хотя, как я уже написал функцию ранее , То, что я хочу сделать, очень просто: вызывать функцию несколько раз, не прибегая к анонимным функциям, чтобы «дублировать» мой код (в конце концов, так как функции должны работать, не так ли?).

+0

Возможный дубликат [jQuery: добавление обработчика события изменения с предопределенной функцией] (http: // stackoverflow.com/questions/4524207/jquery-add-change-event-handler-with-predefined-function) –

ответ

3

Изменение $(window).resize(goToAnchor()); в $(window).resize(goToAnchor);

+0

Правильно, теперь он работает. Спасибо за помощь. – user1236489

2

Вы хотите заменить: $(window).resize(goToAnchor()); с $(window).resize(goToAnchor);.

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

Но вы также можете сделать это:

$(function() { 
    $(window).bind('resize', function() { /*resize code*/ }).trigger('resize'); 
}); 

Это эффективно выполняет код, когда resize событие срабатывает на window объекта, а также на document.ready (.trigger('resize') делает огонь resize событий на document.ready).

+0

"передача кода функции goToAnchor"? Не совсем. Он передает результат * от вызова функции 'goToAnchor'. Скобки приводят к выполнению функции. – cHao

+0

@cHao Это было неловко заявлено, спасибо за вход. – Jasper

+0

@ Jasper Спасибо за ваш ответ, теперь он работает нормально. Кстати, я читал о .trigger() прошлой ночью, и я начинаю «веселиться» вместе с ним, поэтому ваш ответ особенно ценится. – user1236489

0

Хороший способ понять, что происходит, является изменение объявление функции для:

var goToAnchor = function() { ... modify some href attr ... } 

В этом случае

$(window).resize(goToAnchor); 

и

$(window).resize(function() { ... modify some href attr ... }); 

явно делая то же самое.

+0

Спасибо вам тоже. ура – user1236489

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