2013-02-14 5 views
0

Следующая функция работает хорошо. Однако я хотел бы повторно использовать одну и ту же функцию, передав новые параметры. Каков наилучший способ сделать это?Функция повторного использования jQuery

function overlay_f (clickable_link, current_link, overlay_content, overlay) { 
    var clickable_link = $('.p_wrapper p'), 
     overlay = $('#overlay'), 
     close_overlay = $('.close_overlay'); 

    clickable_link.click(function (evt) { 
     evt.preventDefault(); 

     current_link = $(this).attr('class'); 
     var overlay_content = $('#'+current_link); 

     overlay.children().fadeOut(200).promise().done(function() { 
      overlay_content.fadeIn(); 
     }); 

     overlay.fadeIn(); 
    }); 

    overlay.click(function() { 
     overlay.fadeOut(); 
     overlay.children().fadeOut(500); 
    }); 
}  

overlay_f(); 
+4

Повторно использовать его? Вы хотите сделать это плагином? http://docs.jquery.com/Plugins/Authoring –

+1

Просто вызовите функцию с разными параметрами? – adeneo

+1

@adeneo Это будет работать, если они действительно используют параметры в существующем коде. –

ответ

1

Я думаю, что вы могли бы искать что-то например:

function overlay_f(cl, o, co) { 
    var clickable_link = $(cl), 
    overlay = $(o), 
    close_overlay = $(co); 

    clickable_link.click(function(evt){ 
     evt.preventDefault(); 

     current_link = $(this).attr('class'); 
     var overlay_content = $('#'+current_link); 

     overlay.children().fadeOut(200).promise().done(function() { 
      overlay_content.fadeIn(); 
     }); 
     overlay.fadeIn(); 
    }); 

    overlay.click(function(){ 
     overlay.fadeOut(); 
     overlay.children().fadeOut(500); 
    }); 
} 

overlay_f('.p_wrapper p', '#overlay', '.close_overlay'); 
+1

Сказав это, эта стратегия в основном является взломом, и вы действительно должны смотреть на преобразование этого в плагин, как это было предложено @ jay-blanchard. –

+0

ОК, тогда я рассмотрю его преобразование в плагин, спасибо за ваши предложения. .. – Alex

0

Где вы в настоящее время объявления переменных с теми же именами, что и параметры (которые вы никогда не передают аргументы при вызове функции), вместо того, чтобы проверить, если значение уже прошло, и только инициализируется в значения «по умолчанию», если они этого не сделали.

function overlay_f(clickable_link, current_link, overlay_content, overlay) { 
    var clickable_link = clickable_link || $('.p_wrapper p'), 
     overlay = overlay || $('#overlay'), 
     close_overlay = $('.close_overlay'); 

    clickable_link.click(function (evt) { 
     evt.preventDefault(); 

     var current_link = current_link || $(this).attr('class'), 
      overlay_content = overlay_content || $('#' + current_link); 

     overlay.children().fadeOut(200).promise().done(function() { 
      overlay_content.fadeIn(); 
     }); 
     overlay.fadeIn(); 
    }); 

    overlay.click(function() { 
     overlay.fadeOut(); 
     overlay.children().fadeOut(500); 
    }); 
} 

Тогда вы либо вызвать его без аргументов:

overlay_f(); 

или передать аргументы, которые, что вы хотите использовать внутри:

overlay_f(arg1, arg2, arg3, arg4); 
Смежные вопросы